码迷,mamicode.com
首页 > 其他好文 > 详细

guava Function

时间:2015-04-20 20:55:05      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

  在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()));
}

 

    我们看到,Function接口中的apply方法,接收input参数,返回处理后的结果,我们可以通过调用apply方法,获取想要的结果,其实做过 Android的,会感觉上面的很熟悉,我们在Android开发中,一些事件的处理,编码都类似于上面的风格,这就是所谓的函数式编程。
 
    翻开Function接口的源码,里面只有简单的apply和equals两个方法,我们重点来看apply方法,apply方法接收一个输入对象并返回 一个输出 对象。一个好的Function实现应该没有副作用,也就是说对象作为参数传递方法调用apply方法后应保持不变。
 
多数情况下,我们都需要自己书写Function接口的实现,以适应工作的需求,不过Guava提供了Functions工具类,其包含了一些常用的Fu nction实现,如forMap和compose
  接下来,我们通过实例代码,学习其中的两个重要的方法,forMap和compose方法,如下:
  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
    }

 

 
 
 
 
 
 
 

 

guava Function

标签:

原文地址:http://www.cnblogs.com/balfish/p/4442519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!