【java集合】——List按照某个属性进行分组(普通方法及stream流)
·
一、分析
实际应用场景,list中的元素的某个属性是重复的,因此可以按照此元素对list进行分组,最终放到Map集合,此元素为key值,分组后的list为value值
二、实现代码
2.1普通方法
public static Map<String,List<User>> splitGroup(List<User> list){
//初始化一个map
Map<String,List<User>> map = new HashMap<>();
for(User user : list){
String key = user.getId();
if(map.containsKey(key)){
//如果map中存在以此id作为的key,将数据元素存放当前key的list集合中
map.get(key).add(user);
}else{
//map中不存在以此id作为的key,新建key用来存放数据
List<User> userList = new ArrayList<>();
userList.add(user);
map.put(key,userList);
}
}
return map;
}
2.2Stream流
一行代码搞定
Map<String,List<User>> stringListMap = list.stream().collect(Collectors.groupingBy(User::getId));
三、测试代码及测试结果
public static void main(String[] args) {
List<User> list = new ArrayList<>();
//当前测试以id来分组,User实体类中成员变量有id及name,全参构造方法,toString方法
list.add(new User("1", "1"));
list.add(new User("1", "2"));
list.add(new User("2", "2"));
list.add(new User("2", "3"));
list.add(new User("2", "4"));
list.add(new User("3", "3"));
//测试普通方法
//Map<String, List<User>> stringListMap = splitGroup(list);
//测试stream流
Map<String,List<User>> stringListMap = list.stream().collect(Collectors.groupingBy(User::getId));
//将map集合转为set集合遍历
Set<Map.Entry<String, List<User>>> entries = stringListMap.entrySet();
for(Map.Entry m : entries){
System.out.println(m);
}
}
测试的结果如下
参考博客
更多推荐
已为社区贡献3条内容
所有评论(0)