stream collect toMap key 重复
时间: 2024-06-12 16:10:48 浏览: 127
在使用 stream 的 collect 方法将元素收集到 Map 中时,如果指定的 key 重复了,会抛出 IllegalStateException 异常。这是因为 Map 中不能存在重复的 key,如果出现重复的 key,就会导致数据丢失或者数据错误。
解决这个问题的方法是,在收集元素到 Map 中时,指定一个合适的合并函数,用于处理重复的 key。例如,可以使用 merge 方法来合并重复的 key 对应的 value 值。
示例代码如下:
```
List<Person> personList = Arrays.asList(
new Person("Tom", 20),
new Person("Jerry", 30),
new Person("Tom", 40)
);
Map<String, Integer> ageMap = personList.stream()
.collect(Collectors.toMap(
Person::getName,
Person::getAge,
(age1, age2) -> age1 + age2 // 合并函数
));
System.out.println(ageMap);
```
输出结果为:
```
{Tom=60, Jerry=30}
```
在上面的代码中,我们使用了一个合并函数 `(age1, age2) -> age1 + age2` 来处理重复的 key。当出现重复的 key 时,会将两个 value 值相加,然后作为新的 value 值存储到 Map 中。
阅读全文