Function和Functions进行对象转换
Function<F,T>接口: 一个function就是从一个对象到另外一个对象的转换变形
Function接口的第一个参数是原始的对象, 第二个参数就是你想要转成的对象
Function接口中的apply方法,接收一个输入对象并返回一个输出对象, 接收第一个参数, 通过apply方法处理返回你想要的结果。 一个好的Function实现应该没有副作用,也就是说对象作为参数传递方法调用apply方法后应保持不变。
@Test
public void testFunction() {
Function<Date, String> function = new Function<Date, String>() {
@Override
public String apply(Date input) {
return new SimpleDateFormat("yyyy-MM-dd").format(input);
}
};
System.out.println(function.apply(new Date())); //2014-08-21
}
1. 转换单个对象
function.apply(new Date());
2. 批量转换一个集合对象
像Lists和Maps这类的Collection工具类给我们提供了转换的方法:
topMap = Maps.transformValues(fromMap, function);
toList = Lists.transform(fromList, function);
多数情况下,我们都需要自己书写Function接口的实现,以适应工作的需求,不过Guava提供了Functions工具类,其包含了一些常用的Function实现:
Functions.compose()方法
//Function<A, C> compose(Function<B, C> g, Function<A, ? extends B> f)
//接收两个Function作为参数,返回两个Function的组合, f的输出会作为g的输入,g输出为最终作为compose的输出 等价于: g.apply(f.apply(key));
使用Predicate和 Predicates进行对象过滤
使用Supplier和Suppliers进行对象的包装构建