【发布时间】:2014-06-24 21:22:14
【问题描述】:
我无法编译它,甚至可以链接谓词 lambdas 吗?
Arrays.asList("1","2","3").stream().filter( (e -> e=="1" ).or(e-> e=="2") ).count();
或者唯一的方法是显式创建一个谓词,然后像这样组合:
Predicate<String> isOne= e -> e=="1";
Arrays.asList("1","2","3").stream().filter( isOne.or(e -> e=="2") ).count();
或者是否有更“功能优雅”的方式来实现相同的目标?
【问题讨论】:
-
你能举个更好的例子吗?因为在给定的示例中,
e -> e == "1" || e == "2"比连接两个谓词更简单。 -
我认为
or方法适用于您已经拥有一个谓词并且希望将其与其他谓词链接的情况。如果你同时写两个谓词,你可以直接将它们组合成一个,不需要or方法。 -
另外,正如我在回答中强调的那样,使用
equals()比较字符串,不要使用==(除非您确定所有被比较的字符串都被保留了---这是不是绝大多数情况下)。 -
@nosid,实际上,我认为我无法提供无法使用 || 解决的示例或 && 因为 Predicate 必须返回布尔值。我只是把自己锁定在寻找一个实用的解决方案上。
-
@ChrisJester-Young 是的,我知道使用
equals(),而且我特别没有在这段代码中使用它,所以我有疑问的代码部分清晰可见。