erMap = list.stream().collect(Collectors.toMap(UserInfo::getPhoneNumber(), Function.identity());12用法2:根据某一属性,对对象集合进行去重
时间: 2024-10-19 19:08:14 浏览: 20
20190313-100538-非对称电容在变压器油中10kv高压电作用下产生力的现象
这段代码是使用Java 8 Stream API处理集合的一种常见操作,特别是关于`toMap`函数。它创建了一个映射(Map),其中键是`UserInfo`对象的电话号码(通过`getPhoneNumber()`方法获取),值则是对象本身(由`Function.identity()`保证每个对象映射到自身)。这通常用于将数据转换为键值对的形式,便于后续查找和管理。
1. `erMap = list.stream()`首先从列表`list`中创建一个流(Stream)。
2. `.collect(Collectors.toMap(UserInfo::getPhoneNumber(), Function.identity()))`接着应用`Collectors.toMap`收集器,传入两个函数:一个是键生成器(KeyMapper),这里是`getPhoneNumber()`方法,用于提取电话号码作为键;另一个是值提供者(ValueMapper),这里使用的是`Function.identity()`,意味着原始对象的引用将被保留为值。
对于第二个用法,如果你想根据某个对象的特定属性进行去重,可以稍微调整一下代码。例如,如果你有一个User对象的列表,想基于某个字段如`email`去除重,你可以这样做:
```java
Map<String, User> uniqueUsers = list.stream()
.collect(Collectors.toMap(User::getEmail, Function.identity(), (u1, u2) -> u1)); // 使用并集合并冲突,保留第一个遇到的
```
在这里,第三个参数是一个二元函数,当两个用户有相同的电子邮件地址时,它会被用来确定如何合并这两个元素。如果传入`(u1, u2) -> u1`,则会保留第一个找到的用户对象。
阅读全文