因此,假如我用一些随机的过滤器上的流时,最简单的方法就是直接输入谓词:使用谓词或函数作为Java流过滤器有什么区别?
x.stream().filter(e -> e % 2 == 0)
除了我可以简单地做一个参考,并预先定义谓词:
Predicate<Integer> isEven = e -> e % 2 == 0;
...
x.stream().filter(isEven)
但我也用一个函数:
private static boolean isEven(Integer integer) {
return integer % 2 == 0;
}
...
x.stream().filter(MyClass::isEven)
据我所知,谓语当然是非常有限的,而功能可能有副作用等,但由于像Venkat Subramaniam这样的人使用后者的解决方案,我真的想知道:这里的主要区别是什么?
我看到,如果没有MR,我们只能定义关于其重用性的实际上有限的谓词。所以这就产生了一个问题:更简洁的写作方式是什么?使用MR,谓词或实际陈述本身? – AdHominem
@AdHominem它取决于你的上下文。如果你真的不想复用你的谓词,那么只需坚持一个简单的lambda表达式,但是如果你要继续使用它,我建议在一些utils类中创建一个静态的Predicate实例,而不必创建一个方法本身 –