flatMap() 方法常见的使用场景包括:
处理嵌套集合:当流的元素是嵌套集合时,可以使用 flatMap() 方法将嵌套的集合展开为一个扁平的流。
扁平化映射:当需要对流中的每个元素进行某种映射操作,并将多个映射结果合并为一个流时,可以使用 flatMap() 方法。
下面是几个使用 flatMap() 的示例:
示例1:处理嵌套集合
List<List<Integer>> nestedList = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5, 6),
Arrays.asList(7, 8, 9)
);
List<Integer> flattenedList = nestedList.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
System.out.println(flattenedList); // 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
在上述示例中,nestedList 是一个嵌套的集合,我们使用 flatMap() 方法将嵌套的列表展开为一个扁平的流。
示例2:扁平化映射
List<String> words = Arrays.asList("Hello", "World");
List<String> letters = words.stream()
.flatMap(word -> Arrays.stream(word.split("")))
.collect(Collectors.toList());
System.out.println(letters); // 输出:[H, e, l, l, o, W, o, r, l, d]
在上述示例中,words 是一个字符串列表,我们使用 flatMap() 方法将每个字符串拆分为单个字符,并将所有字符合并为一个流。
示例3:多个流合并
List<Integer> list1 = Arrays.asList(1, 2, 3);
List<Integer> list2 = Arrays.asList(4, 5, 6);
List<Integer> list3 = Arrays.asList(7, 8, 9);
List<Integer> mergedList = Stream.of(list1, list2, list3)
.flatMap(List::stream)
.collect(Collectors.toList());
System.out.println(mergedList); // 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
在上述示例中,我们有多个列表 list1、list2 和 list3,我们使用 Stream.of() 方法将它们合并为一个流,然后使用 flatMap() 方法将流中的每个列表展开为一个扁平的流。
这些示例展示了 flatMap() 方法的常见用法,当需要处理嵌套集合、扁平化映射或多个流合并时,可以考虑使用 flatMap() 方法来简化代码和操作。
示例4:
SysChannelCustomList sysChannelCustomList = new SysChannelCustomList();
sysChannelCustomList.setChannelCategory("文本短信、5G阅信、语音短信");
SysChannelCustomList sysChannelCustomList2 = new SysChannelCustomList();
sysChannelCustomList2.setChannelCategory("视频短信、邮箱、语音短信");
List<SysChannelCustomList> list = new ArrayList<>();
list.add(sysChannelCustomList);
list.add(sysChannelCustomList2);
List<String> collect = list.stream().flatMap(s -> Arrays.stream(s.getChannelCategory().split("、"))).collect(Collectors.toList());
System.out.println(collect);//[文本短信, 5G阅信, 语音短信, 视频短信, 邮箱, 语音短信]