Java Stream map flatMap mapMulti的升维和降维

		 //升维
        List<Integer> list = List.of(4, 5, 6);
        System.out.println("第1个");
        //mapMulti产生额外的一个SpinedBuffer对象
        System.out.println(list.stream().<List<Integer>>mapMulti((integer, consumer) -> consumer.accept(List.of(integer))).collect(Collectors.toList()));
        System.out.println("第2个");
        //flatMap产生集合对应数量的Stream对象
        System.out.println(list.stream().flatMap(integer -> Stream.of(List.of(integer))).collect(Collectors.toList()));
        System.out.println("第3个");
        //map无额外对象
        System.out.println(list.stream().map(List::of).collect(Collectors.toList()));

        //降维
        List<List<Integer>> list2 = List.of(List.of(1, 2, 3), List.of(4, 5, 6), List.of(7, 8, 9));
        System.out.println("第4个");
        //mapMulti里有一个闭包对象SpinedBuffer,每次调用consumer都会在SpinedBuffer中记录元素最终合并
        System.out.println(list2.stream().mapMulti((integerList, consumer) -> integerList.forEach(consumer)).collect(Collectors.toList()));
        //mapMulti((integerList, consumer) -> integerList.forEach(consumer))可以缩写为mapMulti(Iterable::forEach) 方便理解不使用缩写版本
        System.out.println("第5个");
        //flatMap会为每个元素产生Stream对象,然后将Stream合并
        System.out.println(list2.stream().flatMap(Collection::stream).collect(Collectors.toList()));
        System.out.println("第6个");
        System.out.println(list2.stream().map(Collection::stream).reduce(Stream::concat).map(Stream::toList).orElseGet(ArrayList::new));
第1个
[[4], [5], [6]]
第2个
[[4], [5], [6]]
第3个
[[4], [5], [6]]
第4个
[1, 2, 3, 4, 5, 6, 7, 8, 9]
第5个
[1, 2, 3, 4, 5, 6, 7, 8, 9]
第6个
[1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值