我构建了一些实现函数式接口(interface)的类,以便可以重用它们,其中包括谓词、函数等。
当我将新实例传递到集合流中时,这些效果非常好,例如:
myList.stream().filter(new PrimeNumberPredicate())...
今天我通过直接创建并调用谓词发现了谓词的用法:
boolean result = new PrimeNumberPredicate().test(myData);
我发现这段代码有点冗长,我想问是否有另一种方法可以编写此代码,以便我可以在不显式调用单个对象上的 test() 的情况下进行测试。
最佳答案
我也不会这么做。函数式接口(interface)的乐趣在于,您不必显式实现任何特定的接口(interface),也不必创建无用的对象。您所需要的只是一种可以完成您想要的操作的方法,并且您可以将其弯曲到您的功能意愿。
静态定义谓词函数:
class PrimeNumbers {
public static boolean isPrime(int number) {
...
}
}
然后在流中使用它,如下所示:
myList.stream().filter(PrimeNumbers::isPrime)...
像您同事的非功能代码可以跳过实例化对象并直接调用函数:
boolean result = PrimeNumbers.isPrime(myData);
这样做的优点是可以让您自然地命名类和方法,而不是“谓词”或“测试”或“应用”。
关于java - 函数式接口(interface)应该直接调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48393313/