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;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容