日常开发中需要将某个集合中拥有相同属性的多个对象过滤出来并返回,那么需要如何做呢?
方式1:嵌套循环
最常用的方式,此处不做过多说明
方式2:Java8 Stream流API
// 假设 students集合中已经有数据
List<Student> students = Lists.newArrayList();
Map<String, List<Student>> sameNameStudents = students.stream()
.collect(Collectors.groupingBy(Student::getName))
.entrySet().stream().filter(entry -> entry.getValue().size() > 1)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue,newValue)->oldValue,LinkedHashMap::new));
说明:我们首先使用groupingBy方法进行分组,然后对分组后的Map的entrySet进行流处理。filter方法用于筛选出值(成员列表)大小大于1的条目。最后,我们使用toMap方法将过滤后的条目转换回Map,同时处理可能出现的键冲突(这里选择保留旧值),并使用LinkedHashMap来保持原始分组的顺序。