Collectors.toMap()避免key重复报错
时间: 2024-03-30 13:32:23 浏览: 120
Java中的`java.util.stream.Collectors.toMap()`方法有什么作用
Collectors.toMap()是Java 8中提供的一个用于将流(Stream)中的元素收集到Map中的方法。当使用Collectors.toMap()方法时,如果存在重复的key,会抛出一个IllegalStateException异常。为了避免这个问题,可以使用Collectors.toMap()方法的重载版本,该版本接受一个合并函数来处理重复的key。
下面是使用Collectors.toMap()方法避免key重复报错的示例代码:
```java
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> persons = List.of(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Alice", 35)
);
// 使用toMap()方法,如果存在重复的key会抛出异常
try {
Map<String, Integer> ageMap = persons.stream()
.collect(Collectors.toMap(Person::getName, Person::getAge));
System.out.println(ageMap);
} catch (IllegalStateException e) {
System.out.println("Duplicate key found!");
}
// 使用toMap()方法的重载版本,传入合并函数来处理重复的key
Map<String, Integer> ageMapWithMerge = persons.stream()
.collect(Collectors.toMap(Person::getName, Person::getAge, (existingValue, newValue) -> newValue));
System.out.println(ageMapWithMerge);
}
static class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age; }
}
}
```
在上面的示例代码中,我们定义了一个Person类,包含name和age属性。我们使用Collectors.toMap()方法将persons流中的元素收集到一个Map中,其中key为name,value为age。在第一个使用toMap()方法的示例中,由于存在重复的key("Alice"),会抛出IllegalStateException异常。而在第二个使用toMap()方法的示例中,我们传入了一个合并函数,当遇到重复的key时,选择保留新的value值。
阅读全文