一个实体类集合 有 名字和身份证属性,会有同名但身份证属性不同的人,使用stream过滤一个map集合,key是名字,value是身份证号码
时间: 2024-10-09 19:03:09 浏览: 30
hibernate多对一、一对一、一对多、多对多映射的理解(经典)
5星 · 资源好评率100%
在Java中,你可以使用Stream API来处理这样的场景。假设你有一个名为`Person`的实体类,包含`name`和`idNumber`两个属性,而这些信息存储在一个Map<String, String>类型的集合(比如HashMap)中,每个键值对代表一个人的信息。
首先,你需要创建一个Person实体类,例如:
```java
public class Person {
private String name;
private String idNumber;
// 构造函数、getter和setter省略
}
```
然后,假设你有一个`Map<String, Person>`,表示名字和对应的身份证信息:
```java
Map<String, Person> people = new HashMap<>();
// 添加一些Person对象到map中,如people.put("张三", new Person("张三", "1234567890"));
```
如果你想通过名字过滤并只获取唯一的身份证号码,可以这样做:
```java
List<String> uniqueIdsByName = people.entrySet().stream()
.filter(entry -> !entry.getValue().equals(people.get(entry.getKey()))) // 过滤同名但身份证不同的
.collect(Collectors.toList()); // 收集名字相同的唯一身份证
uniqueIdsByName.forEach(id -> System.out.println("Name: 张三, ID: " + id)); // 输出结果
```
这个例子中,`filter`操作会保留那些名字相同但身份证不同的条目,然后`collect`将剩下的条目转换成列表。这里假设所有人的名字都是"张三"以便演示,实际应用中应替换为具体的名字。
阅读全文