java guava_guava | 并发编程网 – ifeve.com

原文链接 译文链接 译者:沈义扬,校对:丁一

注意事项

截至JDK7,Java中也只能通过笨拙冗长的匿名类来达到近似函数式编程的效果。预计JDK8中会有所改变,但Guava现在就想给JDK5以上用户提供这类支持。

过度使用Guava函数式编程会导致冗长、混乱、可读性差而且低效的代码。这是迄今为止最容易(也是最经常)被滥用的部分,如果你想通过函数式风格达成一行代码,致使这行代码长到荒唐,Guava团队会泪流满面。

比较如下代码:

Function lengthFunction = new Function() {

public Integer apply(String string) {

return string.length();

}

};

Predicate allCaps = new Predicate() {

public boolean apply(String string) {

return CharMatcher.JAVA_UPPER_CASE.matchesAllOf(string);

}

};

Multiset lengths = HashMultiset.create(

Iterables.transform(Iterables.filter(strings, allCaps), lengthFunction));

或FluentIterable的版本

Multiset lengths = HashMultiset.create(

FluentIterable.from(strings)

.filter(new Predicate() {

public boolean apply(String string) {

return CharMatcher.JAVA_UPPER_CASE.matchesAllOf(string);

}

})

.transform(new Function() {

public Integer apply(String string) {

return string.length();

}

}));

还有

Multiset lengths = HashMultiset.create();

for (String string : strings) {

if (CharMatcher.JAVA_UPPER_CASE.matchesAllOf(string)) {

lengths.add(string.length());

}

}

即使用了静态导入,甚至把Function和Predicate的声明放到别的文件,第一种代码实现仍然不简洁,可读性差并且效率较低。

阅读全文

d0c1501a6d8bb921cf36400dc89de69f.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值