标签:
在Java开发中,我们经常需要对一些对象做一些处理,然后返回我们需要看的结果,比如说:对日期进行格式化,获取字符串表示等,当然,我们可以使用String的Formatter来处理(详见:JDK1.5中java.util.Formatter类的学习探究和使用),不过在Guava中我们可以使用Function接口来实现类似的需求,如下:
@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())); }
public static void testFunctions() { Map<String, Integer> map = new HashMap<String, Integer>() { { put("love", 1); put("miss", 2); } }; Function<String, Integer> function = Functions.forMap(map); //接收一个Map集合作为参数,返回一个Function,用于执行Map集合的查找 //调用apply方法,可以通过key获取相应的value System.out.println(function.apply("love")); //当apply的key值在Map里不存在时,会抛出异常 //java.lang.IllegalArgumentException: Key ‘like‘ not present in map // System.out.println(function.apply("like")); //我们可以通过forMap重载的另一个方法避免异常,当Key不存在时,设置一个默认值 function = Functions.forMap(map, 0); System.out.println(function.apply("like"));//can‘t find this key /** * 有时候,我们需要多个Function进行组合, * 这时就需要用到compose,如下: */ //我们有一个Function用于将输入的数字进行平方运算 Function<Integer, Integer> function1 = new Function<Integer, Integer>() { @Override public Integer apply(Integer input) { return input * input; } }; //我们将上面Map中的value值全部进行平方运算 /** * Warning:这里compose方法的参数位置不能颠倒, * Function<A, C> compose(Function<B, C> g, Function<A, ? extends B> f) * 传入Function<B,C>、Function<A, ? extends B>组合成Function<A, C> */ Function<String, Integer> result = Functions.compose(function1, function); System.out.println(result.apply("love")); //当Key值不存在时,结果也是大写的 System.out.println(result.apply("like"));//CAN‘T FIND THIS KEY }
标签:
原文地址:http://www.cnblogs.com/balfish/p/4442519.html