一个实体类list集合 实体类有 名字和身份证属性,会有同名但身份证属性不同的人,使用stream过滤一个map集合,key是名字,value是list集合,是所有同名人的身份证号码,
时间: 2024-10-09 11:03:11 浏览: 29
在Java中,如果你有一个实体类`Person`,包含`name`和`idNumber`两个属性,并且你有一个Map集合,其中key是名字,value是一个List,存储了同名人的`Person`对象列表。如果你想通过Stream API过滤出每个名字对应的唯一的身份证号码,你可以这样做:
```java
import java.util.*;
import java.util.stream.Collectors;
class Person {
String name;
String idNumber;
}
Map<String, List<Person>> personMap; // 假设这是你的map
// 使用Stream处理
Map<String, Set<String>> uniqueIdsByNames = personMap.entrySet()
.stream() // 遍历map的键值对
.flatMap(entry -> entry.getValue().stream()) // 对于每个值列表,流式处理每一个人
.collect(Collectors.groupingBy(Person::getName, Collectors.mapping(Person::getIdNumber, Collectors.toSet())));
// 现在uniqueIdsByNames是一个新的Map,key是名字,value是该名字下的唯一ID集合
```
这个代码片段首先将Map的每个值列表转换成流,然后通过`groupingBy`函数按名字分组,再使用`mapping`函数提取每个人的身份证号码并收集到一个Set中,确保每个名字对应的所有身份证号码都不重复。
阅读全文