一、准备4个用户对象
User user1 = User.builder()
.name("blues")
.sex("man")
.age(20)
.build();
User user2 = User.builder()
.name("blues")
.sex("woman")
.age(19)
.build();
User user3 = User.builder()
.name("blues")
.sex("woman")
.age(18)
.build();
User user4 = User.builder()
.name("blues")
.sex("woman")
.age(17)
.build();
List<User> users = new ArrayList<>();
users.add(user3);
users.add(user2);
users.add(user3);
users.add(user4);
二、按属性给对象分组
例子:按性别给用户分组
Map<String, List<User>> sexAndUserMap = users.parallelStream()
.collect(Collectors.groupingBy(User::getSex));
三、按A属性分组统计B属性List(Set)
按性别分组统计名称List
Map<String, List<String>> sexAndNameListMap = users.parallelStream()
.collect(Collectors.groupingBy(User::getSex, Collectors.mapping(User::getName, Collectors.toList())));
按性别分组统计名称Set
Map<String, Set<String>> sexAndNameSetMap = users.parallelStream()
.collect(Collectors.groupingBy(User::getSex, Collectors.mapping(User::getName, Collectors.toSet())));
四、按A属性分组统计B属性和对象本身
按性别分组统计名称以及用户本身。
Map<String, Map<String, User>> sexAndNameAndDataMap = users.parallelStream()
.collect(Collectors.groupingBy(User::getSex, Collectors.toMap(User::getName, data -> data)));
这里需要确保B属性在A属性下是唯一的,
示例中得保证名称在各性别组下是唯一的否则会产生用户覆盖。如果不是唯一的,可以采用多级分组
五、多级分组,按A属性分组,在此基础上按B属性分组
Map<String, Map<String, List<User>>> SexAndNameAndUserListMap = users.parallelStream()
.collect(Collectors.groupingBy(User::getSex, Collectors.groupingBy(User::getName)));
六、遍历对象拿A和B属性建立Map映射关系
遍历用户,构建一个名称与性别的Map映射关系
Map<String, String> nameAndSexMap = users.parallelStream()
.collect(Collectors.toMap(User::getName, User::getSex));
这里需要确保A在全局下是唯一的,否则会出现B属性值覆盖的情况
在示例中需要确保名称在所有用户下是唯一的,否则会出现性别覆盖的情况
相关文章
暂无评论...