gpt4 book ai didi

java - 了解函数运算符 : Lambda

转载 作者:行者123 更新时间:2023-11-30 03:47:22 25 4
gpt4 key购买 nike

我有一个名为 Semester of Semester 对象的数组列表

private ArrayList<Semester> Semesters

我编写了以下代码来使用列表(学期)中的对象(学期)打印字符串

String report = year + "\n";
for (Semester s : Semesters) {
report += s.toString() + "\n";
}

然后我得到了有关 netbeans 的提示,其中整个上面的代码可以写在一行中,如下所示:

String report = year + "\n";
report = Semesters.stream().map((s) -> s.toString() + "\n").reduce(report, String::concat);

我是一名中级 Java 学生,我正在尝试理解这个功能,我发现它非常有用,但不太了解它。

请帮我理解这两段代码是如何相同的。

最佳答案

我没有使用过 Java lambda,但是按照函数式编程范例中的 mapreduce\fold 操作,这就是这两个片段的等效方式:

  1. map 基本上将特定函数应用于集合中的每个元素。在本例中,该函数/方法是 s.toString() + "\n"。这与迭代集合并通过 foreach 循环将函数应用于每个元素相同。
  2. reduce 是一个折叠操作,即将映射操作返回的每个元素连接到原始字符串report

所以在你的原始代码中

String report = year + "\n";
for (Semester s : Semesters) {
report += s.toString() + "\n";
}

您基本上对元素s进行操作,然后将该操作的结果连接到报告。使用 lambda,首先在 map 阶段对整个集合进行操作,然后遍历映射期间返回的集合,并将每个元素连接到 reduce 中的 report 阶段。

关于java - 了解函数运算符 : Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25306009/

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