java 8 Stream流当中的map和flatMap的区别

在Java 8及更高版本中引入的Stream API是处理集合数据的强大工具,其中mapflatMap是两个常用的操作,它们用于转换流中的元素。

map:

map函数可以看作是对流中的每一个元素应用一个函数,将元素转换成新的形式。你可以把它想象成你在厨房里准备食材的过程。假设你有一篮子苹果,你想把它们变成苹果片。在这个过程中,你拿一个苹果,切成片,然后放回篮子里。map就是做类似的事情,只不过它是对数据进行操作。

例子: 假设你有一个字符串列表,你想将它们全部转换成大写。你可以使用map来实现:

List<String> words = Arrays.asList("ai", "wenwen", "fifi");
List<String> upperCaseWords = words.stream()
                                   .map(String::toUpperCase)
                                   .collect(Collectors.toList());

这里的map(String::toUpperCase)会对流中的每一个字符串应用toUpperCase方法,转换成大写后再收集到新的列表中。

flatMap:

flatMap函数则更进一步,它不仅转换流中的元素,而且还会扁平化结果。这就像你在厨房里处理一篮子苹果,但这次篮子里装的不是单个苹果,而是装着苹果的小袋子。flatMap会先打开每个小袋子,取出苹果,然后切片,最后把所有的苹果片放在一起,而不是保留原来的袋子结构

假设你有一个列表,列表中的每个元素也是一个列表(嵌套列表)。你想把这些嵌套的列表“摊平”成一个单一的列表。flatMap可以帮你做到:

List<List<Integer>> nestedList = Arrays.asList(
    Arrays.asList(1, 2),
    Arrays.asList(3, 4),
    Arrays.asList(5)
);
List<Integer> flatList = nestedList.stream()
                                   .flatMap(List::stream)
                                   .collect(Collectors.toList());

在这个例子中,flatMap(List::stream)会将每个内部列表转换为流,然后将这些流合并成一个大的流,最后收集到一个单一的列表中。

总的来说,mapflatMap都是用于转换流中的数据,但flatMap还能处理嵌套的数据结构,将它们扁平化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值