Guava使用

Guava中针对集合的 filter和过滤功能

package com.kaishengit;

import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.kaishengit.entity.User;

import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

public class Test {

    public static void main(String[] args) {

        /*User user = new User();
        user.setId(100);
        user.setFirstName("Jack");

        User user2 = new User();
        user2.setId(101);
        user2.setFirstName("Rose");

        User user3 = new User();
        user3.setId(103);
        user3.setFirstName("Rose2");

        List<User> userList = Lists.newArrayList(user,user2,user3);

        List<User> subList = Lists.newArrayList(Collections2.filter(userList, new Predicate<User>() {
            @Override
            public boolean apply(User user) {
                return user.getFirstName().startsWith("Ro");
            }
        }));

        Set<String> set = Sets.newHashSet();
        Map<String,Object> map = Maps.newHashMap();*/


        /*List<String> nameList = Lists.newArrayList(Collections2.transform(userList, new Function<User, String>() {
            @Override
            public String apply(User f) {
                return f.getFirstName();
            }
        }));*/

       /* List<String> nameList = Lists.newArrayList();

        for(User u : userList) {
            nameList.add(u.getFirstName());
        }*/


        //List<String> list = Lists.newArrayList("A1","A2");

        /*List<String> list = Lists.newArrayList();
        list.add("A1");
        list.add("A2");*/
    }
}

2017-9-26 9-10-29.png
guava使用.png
guava过滤.png

clipboard.png

缓存 测试

package com.kaishengit.service;

import com.kaishengit.entity.User;
import org.junit.Test;

import static org.junit.Assert.*;

public class UserServiceWithGuavaTest {

    private UserService userService = new UserService();

    @Test
    public void findById() throws Exception {
        User user = userService.findById(7);
        user = userService.findById(7);

        System.out.println(user);
    }

}

配置

package com.kaishengit.service;

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.kaishengit.dao.UserDao;
import com.kaishengit.entity.User;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

public class UserServiceWithGuava {

    private UserDao userDao = new UserDao();

    private static Cache<String,User> cache = CacheBuilder.newBuilder()
            .maximumSize(100)//f放一百个数据
            .expireAfterAccess(10,TimeUnit.MINUTES)//天数
            .build();

    public User findById(Integer id) {
        User user = null;
        try {
            user = cache.get("user:" + id, new Callable<User>() {
                @Override
                public User call() {
                    return userDao.findById(id);
                }
            });
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return user;
    }



    /*private static LoadingCache<String,User> cache = CacheBuilder
            .newBuilder()
            .maximumSize(100)
            .expireAfterAccess(50, TimeUnit.SECONDS)
            .build(new CacheLoader<String, User>() {
                @Override
                public User load(String key) {
                    UserDao userDao = new UserDao();
                    return userDao.findById(Integer.valueOf(key));
                }
            });

    public User findById(Integer id) {
        User user = cache.getUnchecked(id.toString()); //cache.get("user:"+id);  与 cache.getUnchecked(id.toString());区别当上面重写方法load()的时候getUnchecked 部抛异常
        return user;
    }*/


}

缓存使用


    // 发送激活用户账号的邮件,写进去时间,如果没人访问就过期,有人访问就延期时间
    private static Cache<String, String> cache = CacheBuilder
            .newBuilder()
            .expireAfterWrite(6, TimeUnit.HOURS)
            .build();
    // 找回密码token
    private static Cache<String, String> passwordCache = CacheBuilder.newBuilder()
            .expireAfterWrite(30, TimeUnit.MINUTES)
            .build();
    // 限制操作pinlv
    private static Cache<String, String> activeCache = CacheBuilder.newBuilder()
            .expireAfterWrite(30, TimeUnit.SECONDS)
            .build();

测试

/**
 * Created by wanggs on 2017/9/28.
 */
public class CacheTest {
    public static void main(String[] args) {// 限制操作pinlv
        Cache<String, String> activeCache = CacheBuilder.newBuilder()
                .expireAfterWrite(1, TimeUnit.MILLISECONDS)
                .build();
        String id = "1";
        while (true){
            if (activeCache.getIfPresent(id) == null){
                System.out.println("处理业务........***************************..........");
                activeCache.put(id,"000000000");
            }else {
                System.out.println("操作频率太快");
            }
        }


    }
}

转换器:利用 Collections2.transform() 方法来转换集合中的元素。譬如把一个 Set<Integer> 里面所有元素都转换成带格式的 String 来产生新的 Collection<String>:

    @Test
    public void transForm() {
        HashSet<Long> set = Sets.newHashSet();
        set.add(20000000000000L);
        set.add(30000000000000L);
        set.add(40000000000000L);
        List<String> strings = Lists.newArrayList(Collections2.transform(set, new Function<Long, String>() {
            @Override
            public String apply(Long aLong) {
                return String.valueOf(aLong).substring(11);
            }
        }));

        for (String st:strings){
            System.out.println(st);
        }
    }
获取token

    private LoadingCache<String, String> cache = CacheBuilder.newBuilder()
            .maximumSize(10)
            .expireAfterWrite(86400, TimeUnit.SECONDS)
            .build(new CacheLoader<String, String>() {
                @Override
                public String load(String s) throws Exception {

                    String json = NNOpenSDK.getIntance().getMerchantToken("40739133", "D324B2EFA1224A5A");

                    Map<String, Object> map = JSON.parseObject(json, Map.class);
                    if (map.containsKey("error")) {
                        LogKit.error("获取AccessToken异常:" + map.get("error_description"));
                        return null;
                    } else {
                        return map.get("access_token").toString();
                    }
                }
            });


    /**
     * 获取微信的AccessToken
     * @return
     */
    public String getAccessToken() {
        try {
            return cache.get("");
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return null;
    }



    // guava缓存
    private static Cache<String, PartnerInfo> cache = CacheBuilder.newBuilder()
            .maximumSize(10)
            .expireAfterAccess(1, TimeUnit.DAYS)
            .build();

    public PartnerInfo findById(String partnerId) {
        PartnerInfo partnerInfo = null;
        try {
            partnerInfo = cache.get(partnerId, new Callable<PartnerInfo>() {
                @Override
                public PartnerInfo call() {
                    return partnerInfoService.findPartnerInfo(partnerId);
                }
            });
        } catch (ExecutionException e) {
            LogKit.error("【无量签名】 缓存异常: " + e.getMessage());
            e.printStackTrace();
        }
        return partnerInfo;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,657评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,631评论 18 399
  • 一、常见的限流算法 目前常用的限流算法有两个:漏桶算法和令牌桶算法。 1.漏桶算法 漏桶算法的原理比较简单,请求进...
    端木轩阅读 5,788评论 0 3
  • 一. Java基础部分.................................................
    wy_sure阅读 3,811评论 0 11
  • 1、去天天购物给兔爹买衣服,走到二楼,他被李宁T恤的减价广告吸引过去,我慢腾腾地边走边看着特价展示的鞋子。 “你好...
    兔娘阅读 438评论 0 0