通过对象的某个属性进行分组
要求:
List<User> ===> Map<Integer,List<User>>
一个list集合,按照对象的level进行分组,map的key就是level。
@Data
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int level;
private String name;
}
方法一:Lambda方式
Map<Integer, List<User>> userMap = new HashMap<>();
User u1 = new User(1,"u1");
User u2 = new User(2,"u2");
User u3 = new User(1,"u3");
User u4 = new User(3,"u4");
List<User> list = new ArrayList();
list.add(u1);
list.add(u2);
list.add(u3);
list.add(u4);
//上面新建list时需要指定泛型为User,否则下面getLevel()方法提示没有此方法
userMap = list.stream().collect(Collectors.groupingBy(user -> user.getLevel()));
System.out.println(collect);
方法二:遍历
Map<Integer, List<User>> userMap = new HashMap<>();
User u1 = new User(1,"u1");
User u2 = new User(2,"u2");
User u3 = new User(1,"u3");
User u4 = new User(3,"u4");
List<User> list = new ArrayList();
list.add(u1);
list.add(u2);
list.add(u3);
list.add(u4);
for(User u:list){
if(!userMap.containsKey(u.getLevel())){
List<User> ulist = new ArrayList<>();
ulist.add(u);
userMap.put(u.getLevel(),ulist);
}else{
userMap.get(u.getLevel()).add(u);
}
}
System.out.println(userMap);