LambdaJ:为什么我们不能在select子句中应用操作?

时间:2012-08-06 14:33:26

标签: java lambda functional-programming lambdaj

select(list, having(on(Integer.class).intValue() % 2, equalTo(0)));

上面的代码抛出异常。

2 个答案:

答案 0 :(得分:1)

必须在select()之前评估%操作,而对每个条目评估的是什么。即你想要的是Java 8中提供的闭包。

如果您使用循环,则可以编写

for(int i: list)
    if(i % 2 == 0)
       // do something with i.

Java的语法经常使得使用循环是最干净的解决方案,理想情况下你应该有一个选择(它也很多更快)。

答案 1 :(得分:1)

您需要定义自己的匹配器:

Matcher<Integer> even = new Predicate<Integer>() {         
 public boolean apply(Integer item) {                 
 return item % 2 == 0;         
} };

改编自:http://code.google.com/p/lambdaj/wiki/LambdajFeatures