Guava函数式编程(3)

使用Supplier接口

Supplier接口只要一个方法:

public interface Supplier {
   T get();
}

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

public class ComposedPredicateSupplier implements Supplier> {
     @Override
     public Predicate 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 stateMap = Maps.newHashMap();
           stateMap.put(state.getCode(),state);
           stateMap.put(state1.getCode(),state1);
           Function mf = Functions.forMap(stateMap);
           return Predicates.compose(new RegionPredicate(), mf);
     }
}
  • 使用Suppliers.memoize
    memoize() 函数第一次 get() 的时候,它会调用真正Supplier,得到结果并保存下来,下次再访问就返回这个保存下来的值。
Supplier> wrapped = Suppliers.memoize(composedPredicateSupplier);
  • 使用Suppliers.memoizeWithExpiration
    有时候,这个值只在一段时间内是有效的,让我们可以设定过期时间:
Supplier> wrapped = Suppliers.memoize(composedPredicateSupplier,10L,TimeUnit.MINUTES);

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

你可能感兴趣的:(Guava函数式编程(3))