Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2011-09-13) op4j

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

主页:http://www.op4j.org/

这是一个在Java中模似出函数式风格的库,示例代码如下:

Calendar now = Calendar.getInstance();
Set<Calendar> set =
    Op.on(list).toSet().map(FnString.toCalendar("dd/MM/yyyy")).removeAllNullOrTrue(FnCalendar.after(now)).get();

这一行代码,做了很多事情:

  1. 将list变为set,可去掉重复
  2. 对每个元素进行转换为Date的操作
  3. 去掉所有null
  4. 如果某个某个元素的值在当前时间之后,选用
  5. 取出符合条件的Date,得到一个Set

看起来挺酷的,但其实我不太推荐在Java中使用这种伪函数式风格。毕竟是模拟出来的,用起来总觉得手脚僵硬。有时候一些很自然的需求,却无法用这种方式实现,比如:取成一个Person列表中每个人的名字,组成一个新list,不知道怎么用这个实现。

看到这些,又不自然地去想到如scala, groovy这样的语言了。

comments powered by Disqus