Java 8 中引入了函数接口(interface),用于在 Java 中实现函数式编程。它代表一个函数,它接受一个参数并产生一个结果。它易于练习和阅读,但我仍在努力了解它的好处,而不仅仅是让它看起来很酷。例如,
Function<Integer, Double> half = a -> a / 2.0;
Function<Double, Double> triple = b -> b * 3;
double result = half.andThen(triple).apply(8);
可以转换为标准方法,如private Double half(int a) {
return a / 2.0;
}
private Double triple (int b) {
return b * 3;
}
double result = triple(half(8));
那么使用Function有什么好处呢?谈到函数式编程,Java 中的函数式编程究竟是什么以及它可以带来的好处?它会不会像这样受益:Stream
? 基本上,我很想知道,在什么情况下我们更喜欢使用函数而不是普通方法?是否有无法或难以使用的用例,或使用正常方法转换的用例?
最佳答案
Function
的一种用法在 Streams 中。大家都用map
这些天的方法,我相信:
此 map
方法接受 Function
作为参数。这允许编写非常优雅的代码——这是在 Java 8 之前无法实现的:
Stream.of("a", "b", "c")
.map(s -> s.toUpperCase())
.collect(Collectors.toList());
// List of A, B, C
现在确实有方法引用和功能接口(interface)(其中之一当然是Function
),这让您可以使用方法引用将上面的示例重写为:Stream.of("a", "b", "c")
.map(String::toUpperCase)
.collect(Collectors.toList())
...但这只是一个语法糖 - map
仍然接受 Function
当然作为参数。另一个使用
Function
的例子来自 Java 本身是 StackWalker
:下面是一个例子:
List<StackFrame> frames = StackWalker.getInstance().walk(s ->
s.dropWhile(f -> f.getClassName().startsWith("com.foo."))
.limit(10)
.collect(Collectors.toList()));
}
请注意拨打 walk
的电话方法 - 它接受一个函数作为参数。所以最重要的是,它只是另一个工具,可以帮助程序员表达他/她的意图。在适当的地方明智地使用它。
关于java - 使用 Java 函数而不是普通方法的好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68735701/