java - 函数式接口(interface)应该直接调用吗?

标签 java functional-interface

我构建了一些实现函数式接口(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/

相关文章:

java - Function.class 中下界通配符的目的是什么?

java - 尝试执行 mvn clean install -DskipTests=true 时出现错误

java - 对象突变时默认哈希码是否更改

java - 打开 netbeans 时出现 JVM 创建失败消息

lambda - Java 8 中的 lambda 表达式如何支持函数式编程?

kotlin - 如何在 Kotlin 中将功能接口(interface)实现为 lambda?

java - 对返回接口(interface)的方法的静态引用(with::)

java - Guava 表到 CSVPrinter(带标题)

java - 如何将已处理的工具项放置在右侧

Java 方法不能与 Lambda 表达式一起应用