Guava函数式编程(3)

使用Supplier接口

Supplier接口只要一个方法:

public interface Supplier<T> {
   T get();
}

非常简单的一个定义,简而言之,得到一个对象。但它有什么用呢?我们可以把耗资源运算放到get方法里,在程序里,我们传递的是Supplier对象,直到调用get方法时,运算才会执行。
实现Supplier的示例:

public class ComposedPredicateSupplier implements Supplier<Predicate<String>> {
     @Override
     public Predicate<String> get() {
           City city = new City("Austin,TX","12345",250000, Climate.SUB_TROPICAL,45.3);
           State state = new State("Texas","TX", Sets.newHashSet(city), Region.SOUTHWEST);
           City city1 = new City("New York,NY","12345",2000000,Climate.TEMPERATE,48.7);
           State state1 = new State("New York","NY",Sets.newHashSet(city1),Region.NORTHEAST);
           Map<String,State> stateMap = Maps.newHashMap();
           stateMap.put(state.getCode(),state);
           stateMap.put(state1.getCode(),state1);
           Function<String,State> mf = Functions.forMap(stateMap);
           return Predicates.compose(new RegionPredicate(), mf);
     }
}
  • 使用Suppliers.memoize
    memoize() 函数第一次 get() 的时候,它会调用真正Supplier,得到结果并保存下来,下次再访问就返回这个保存下来的值。
Supplier<Predicate<String>> wrapped = Suppliers.memoize(composedPredicateSupplier);
  • 使用Suppliers.memoizeWithExpiration
    有时候,这个值只在一段时间内是有效的,让我们可以设定过期时间:
Supplier<Predicate<String>> wrapped = Suppliers.memoize(composedPredicateSupplier,10L,TimeUnit.MINUTES);

PS:函数式编程里的惰性求值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,463评论 19 139
  • 函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。 上面代码检查函数l...
    呼呼哥阅读 8,918评论 0 1
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,146评论 1 51
  • 说实话,好久没有看见若风这种笑容了。 而且还是笑的这么灿烂的这种。 自从PDD来到熊猫后,若风就没有怎么笑过。 甚...
    黄铜刀阅读 2,563评论 0 0
  • 好像,好像见过你。 我们每天经历着新鲜的事情或者一如既往不变的生活 见到不同的人不同的感受不同的直觉 但始终你是发...
    吴雅琳_sibyl阅读 1,300评论 0 1