自学内容网 自学内容网

java 中stream.map()和stream.reduce()

stream.mapstream.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:用于将流中的元素组合成一个单一的值,常用于聚合操作。

更复杂的例子

mapreduce 结合使用,先将每个元素转换,然后进行聚合。

例子

假设我们有一个字符串列表,需要先将每个字符串的长度计算出来,然后计算总长度。

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. 尝试使用其他流操作(如filterflatMap)与mapreduce结合进行复杂的数据处理。
b. 在项目中使用流处理数据,提升代码的可读性和效率。


原文地址:https://blog.csdn.net/xuanyuanjiaqi/article/details/140495788

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!