guava Function Predicate Supplier

介绍下Guava中比较重要的几个类:Function、Predicate、Supplier 以及对应的工具类:Functions、Predicates、SuppliersFunctionFunction是一个接口,本质是用来做转换的。主要是用apply方法把input转换为另外一个对象。一般都是用匿名内部类的方式使用。源码如下:public interface Function {
摘要由CSDN通过智能技术生成

介绍下Guava中比较重要的几个类:Function、Predicate、Supplier
以及对应的工具类:Functions、Predicates、Suppliers

Function

Function是一个接口,本质是用来做转换的。主要是用apply方法把input转换为另外一个对象。一般都是用匿名内部类的方式使用。源码如下:

public interface Function<F, T> {
   
  T apply(@Nullable F input);
  boolean equals(@Nullable Object object);
}

java目前不支持闭包(除了java8),对于闭包,java目前只能说用匿名类,但是内部类语法的代码量比较大,如果大量用匿名类会使得代码难以阅读和维护。如果了解javascript中的function对象和apply方法,会对guava的Function类的语义理解有很重要的帮助

Fucntion的一个转换实例
将日期型,转换为字符串

        Function<Date, String> fun = new Function<Date, String>() {
            public String apply(Date input) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                return sdf.format(input);
            }
        };
        String apply = fun.apply(new Date());
        System.out.println(apply); //输出:2016-06-14 17:33:03

从上面的代码没看出来Function有啥好的地方,反而使得代码更复杂了。所以并不是所有的转换场景都适合用Function。一些简单原则是

  • 能用简单的方法,就不要用Function
  • 一般单一对象转换不需要用Function,针对集合的可以考虑使用

Function的集合实例

        ArrayList<String> lists = Lists.newArrayList("a", "b", "c");
        List<String> objects = FluentIterable.from(lists).transform(new Function<String, String>() {
            public String apply(String input) {
                return input + "-" + input;
            }
        }).toList();
        System.out.println(objects);//输出[a,-a,, b-b, c-c]

使用FluentIterable.from(list).tranfrom(Function)来转换真个集合的元素

Functions

Functions针对Function提供了一些工具类
compose
组合Function,比如Function1是把A转换为B,Function2是把B转换为C,可是用compose组合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值