java 中stream.map()和stream.reduce()
stream.map
和 stream.reduce
是 Java Stream API 中的两个不同操作,用于对流中的元素进行转换和聚合。它们在功能和用途上有很大的区别。
stream.map
map
方法用于将流中的每个元素应用一个函数,并返回一个包含应用该函数后的新元素的流。它通常用于将一种类型的对象转换为另一种类型的对象,或对流中的每个元素进行操作。
例子
假设我们有一个整数列表,需要将每个整数平方。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class MapExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> squaredNumbers = numbers.stream()
.map(n -> n * n)
.collect(Collectors.toList());
System.out.println(squaredNumbers); // 输出: [1, 4, 9, 16, 25]
}
}
在这个例子中:
map(n -> n * n)
:将每个整数转换为它的平方。
stream.reduce
reduce
方法用于将流中的元素组合成一个单一的值。它通常用于求和、求积、连接字符串等聚合操作。reduce
接受一个初始值和一个 BinaryOperator(例如,lambda 表达式),将流中的元素依次与累加器组合。
例子
假设我们有一个整数列表,需要计算它们的总和。
import java.util.Arrays;
import java.util.List;
public class ReduceExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.reduce(0, (a, b) -> a + b);
System.out.println(sum); // 输出: 15
}
}
在这个例子中:
reduce(0, (a, b) -> a + b)
:从初始值0
开始,将每个元素依次与累加器相加,最终得到总和。
总结
map
:用于将流中的每个元素转换为另一种类型或对其进行操作,返回一个新的流。reduce
:用于将流中的元素组合成一个单一的值,常用于聚合操作。
更复杂的例子
将 map
和 reduce
结合使用,先将每个元素转换,然后进行聚合。
例子
假设我们有一个字符串列表,需要先将每个字符串的长度计算出来,然后计算总长度。
import java.util.Arrays;
import java.util.List;
public class MapReduceExample {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "cherry");
int totalLength = words.stream()
.map(String::length)
.reduce(0, Integer::sum);
System.out.println(totalLength); // 输出: 16
}
}
在这个例子中:
map(String::length)
:将每个字符串转换为它的长度。reduce(0, Integer::sum)
:将所有长度相加,得到总长度。
下一步建议:
a. 尝试使用其他流操作(如filter
、flatMap
)与map
和reduce
结合进行复杂的数据处理。
b. 在项目中使用流处理数据,提升代码的可读性和效率。
原文地址:https://blog.csdn.net/xuanyuanjiaqi/article/details/140495788
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!