Collectors.toMap用法
时间: 2023-10-19 21:34:39 浏览: 110
Collectors.toMap是Java 8中提供的一个工具类,用于将流(Stream)中的元素转换为Map对象。它接受三个参数:键的提取函数(keyMapper),值的提取函数(valueMapper),以及冲突解决函数(mergeFunction)。
使用Collectors.toMap的基本语法如下:
```
Map<K, V> map = stream.collect(Collectors.toMap(keyMapper, valueMapper, mergeFunction));
```
其中,keyMapper是一个Function接口实例,用于从流元素中提取键;valueMapper是一个Function接口实例,用于从流元素中提取值;mergeFunction是一个BinaryOperator接口实例,用于解决键冲突时的合并逻辑。
下面是一个示例,假设我们有一个包含学生姓名和年龄的Student对象流,我们希望将学生姓名作为键,年龄作为值,构建一个Map对象:
```java
List<Student> students = // 获取学生列表
Map<String, Integer> studentMap = students.stream()
.collect(Collectors.toMap(Student::getName, Student::getAge));
```
在上面的示例中,Student::getName和Student::getAge分别是从Student对象中提取姓名和年龄的方法引用。这样,我们就可以将学生流转换为一个以学生姓名为键、年龄为值的Map对象。
如果存在键冲突,可以通过传递一个合适的mergeFunction来解决。例如,如果我们希望将学生姓名作为键,年龄作为值,并且当存在重复键时,选择较大的年龄作为值,可以使用如下代码:
```java
Map<String, Integer> studentMap = students.stream()
.collect(Collectors.toMap(Student::getName, Student::getAge, Math::max));
```
这样,当存在重复的学生姓名时,mergeFunction将会选择较大的年龄。
希望以上解答对你有帮助!如果还有其他问题,请继续提问。
阅读全文