Guava库学习:学习Guava Cache(五)CacheLoader

    原文地址:http://www.xx566.com/detail/176.html

    上一篇,Guava库学习:学习Guava Cache(四)CacheBuilderSpec 中, 我们简单的学习了使用CacheBuilderSpec类构造CacheBuilder实例,在之前的CacheBuilder学习中,我们注意到了 build方法里面传入的CacheLoader,简单的做了一些了解,不过其中仍有一些方法我们没有涉及,本篇,我们就来研究和学习一下 CacheLoader。

 

    CacheLoader是一个抽象类,因为其中的load方法是一个抽象方法,翻看源码,其中也提供了一个loadAll方法,用于接收一个 Iterable对象,loadAll方法代表加载所有包含在传入Iterable中的缓存条目(除非我们覆盖loadAll方 法),CacheLoader中提供了两个静态方法,能够使我们利用之前Guava函数式编程中学习到的一些工具类,如FunctionSupplier

 

    第一个方法接收一个Function对象,用于进行对象传入到传出的转换更多Funciton,参见【Guava库学习:函数编程(一)使用Function和Functions进行对象转换

CacheLoader<Key,value> cacheLoader =
        CacheLoader.from(Function<Key,Value> func);

    当Function对象作为CacheLoader.from方法的参数时,我们可以获取到返回的CacheLoader实例,key为传入的对象,value为key经过Function转换后的值,下面是一个简单的示例:

@Test
public void testCacheLoaderFunction() throws Exception {
    Function<Date, String> function = new Function<Date, String>() {
        @Override
        public String apply(Date input) {
            return new SimpleDateFormat("yyyy-MM-dd").format(input);
        }
    };
    CacheLoader<Date, String> cacheLoader = CacheLoader.from(function);
 
    assertThat(cacheLoader.load(new Date()), is("2014-12-06"));
 
}

    与之类似的,CacheLoader.from方法也可以接收一个Supplier,进行对象的包装构建(更多Supplier,参见【Guava库学习:函数编程(三)使用Supplier和Suppliers进行对象的包装构建):

CacheLoader<Object,Value> cacheLoader =
        CacheLoader.from(Supplier<Value> supplier);

    上面的方法,我们通过一个Supplier方法构建了一个CacheLoader实例,值得注意的是,任意传递给CacheLoader的键,都会导致Supplier的get方法被调用。下面是一个简单的示例:

@Test
     public void testCacheLoaderSupplier() throws Exception {
    Supplier<Long> supplier = new Supplier<Long>() {
        @Override
        public Long get() {
            //这里简单的返回时间戳
            return System.currentTimeMillis();
        }
    };
    CacheLoader<Object, Long> cacheLoader = CacheLoader.from(supplier);
    System.out.println(cacheLoader.load("first"));
    Thread.sleep(300);//这里线程休息下,方便测试
    System.out.println(cacheLoader.load("second"));
}

    代码地址:http://git.oschina.net/realfighter/xx566-diary/blob/master/src/guava/CacheLoaderTest.java

转载于:https://my.oschina.net/realfighter/blog/353056

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值