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