一句话总结,类似于ES6中的多维数组展平
⏹1. flatMap实践
实体类
class User {
Integer id;
String name;
List<String> hobby;
// 省略构造方法和toString()重写
}
调用
public static void main(String[] args) {
// 初始化测试数据
List<String> hobby1 = Arrays.asList("java", "c", "音乐");
List<String> hobby2 = Arrays.asList("c++", "c", "游戏");
List<User> users = Arrays.asList(new User(1, "张三", hobby1), new User(2, "李四", hobby2));
// 将集合中每个用户的爱好进行计算,取并集
List<String> result = users.stream()
// 获取出每个用户的hobby列表,.map()处理完之后的流中包含若干list
.map(user -> user.hobby)
// 通过flatMap对流中的list进行展平
.flatMap(Collection::stream)
// 去重
.distinct()
// 收集为list
.collect(Collectors.toList());
System.out.println(result); // [java, c, 音乐, c++, 游戏]
}
⏹2. flatMap实践
public static void main(String[] args) {
// 准备二维数组.最终数组结构为 [["aa", "bb", "cc"], ["bb", "cc", "dd"]]
List<List<String>> testList = Arrays.asList(Arrays.asList("aa", "bb", "cc"), Arrays.asList("bb", "cc", "dd"));
// 通过.flatMap()将多维数组展平
List<String> list = testList.stream().flatMap(Collection::stream).collect(Collectors.toList());
System.out.println(list); // ["aa", "bb", "cc", "bb", "cc", "dd"]
}