一个实体类集合 有 名字和身份证属性,会有同名但身份证属性不同的人,使用stream过滤一个map集合,key是名字,value是list集合,是所有同名人的身份证号码,
时间: 2024-10-09 13:03:06 浏览: 41
当你有一个实体类集合,比如Person类,它包含姓名(name)和身份证号(idCard)两个属性,并存储在一个Map<String, List<String>>的数据结构中,其中键(key)代表名字,值(value)是一个包含身份证号的列表。如果你想要通过Stream API过滤出所有同名但身份证号码可能不同的个体,可以按照以下步骤操作:
1. 首先,获取这个Map的所有键值对作为Stream流。
```java
Map<String, List<String>> personMap = ...; // 假设这是你的实体类集合
Stream<Map.Entry<String, List<String>>> stream = personMap.entrySet().stream();
```
2. 使用`groupingBy`函数根据名字分组,得到每个名字及其对应的身份证号码列表。
```java
Map<String, Stream<String>> groupedByNames = stream.groupingBy(Entry::getKey);
```
3. 对于每个名字,使用`distinct`函数去除身份证号码列表中的重复项,然后收集到一个新的List。
```java
Map<String, List<String>> filteredMap = groupedByNames.entrySet()
.stream()
.collect(Collectors.toMap(
Entry::getKey,
e -> e.getValue().distinct() // 这里去重
));
```
4. 现在`filteredMap`包含了每个名字及其对应的不同身份证号码。
阅读全文