//升维
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]