gpt4 book ai didi

java - 使用 Java 函数而不是普通方法的好处?

转载 作者:行者123 更新时间:2023-12-04 11:13:27 25 4
gpt4 key购买 nike

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 中的函数式编程究竟是什么以及它可以带来的好处?它会不会像这样受益:
  • 一起执行链接函数(例如andThen & compose)
  • Java内部的用法Stream ?
  • 访问修饰符作为函数往往定义为私有(private)而不是公共(public),而方法可以是?

  • 基本上,我很想知道,在什么情况下我们更喜欢使用函数而不是普通方法?是否有无法或难以使用的用例,或使用正常方法转换的用例?

    最佳答案

    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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com