参考链接
import cn.hutool.core.collection.ListUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class FlatMapLearn {
@Data
@AllArgsConstructor
public static class User {
/** 姓名 */
private String name;
/** 权限 */
private List<String> permissionList;
}
public static void main(String[] args) {
// 创建5个用户
List<User> users = new ArrayList<>();
users.add(new User("Alice", ListUtil.of("A", "B", "C")));
users.add(new User("Bob", ListUtil.of("B", "C", "D")));
users.add(new User("Charlie", ListUtil.of("C", "D", "E")));
users.add(new User("David", ListUtil.of("D", "E", "F")));
users.add(new User("Eve", ListUtil.of("E", "F", "G")));
// 使用map获取
List<String> list = new ArrayList<>();
users.stream().map(User::getPermissionList).forEach(l -> {
l.stream().forEach(str -> {
if (!list.contains(str)) {
list.add(str);
}
});
});
System.out.println(list);
// 使用map和flatmap获取他们所有的权限
List<String> allPermissions = users.stream()
.flatMap(user -> user.getPermissionList().stream())
.distinct()
.collect(Collectors.toList());
// 输出结果
System.out.println(allPermissions);
}
}
flatMap作用是将多个list平铺为一个流进行处理,通过idea的流debug也可以直观的看到结果