Duplicate key Collectors.toMap
时间: 2023-12-28 09:59:04 浏览: 166
INSERT INTO .. ON DUPLICATE KEY更新多行记录
在Java 8中,`Collectors.toMap`是一个非常有用的方法,它可以将一个集合转换为一个Map对象。然而,如果在转换过程中遇到重复的键,就会抛出`java.lang.IllegalStateException`异常,表示存在重复的键。
为了解决这个问题,可以使用`toMap`方法的重载版本,该版本允许我们提供一个合并函数来处理重复键。合并函数接收两个参数,代表相同键的旧值和新值,并返回一个合并后的值。这样,我们就可以自定义处理重复键的逻辑。
以下是一个示例代码,展示了如何使用`toMap`方法并提供一个合并函数来处理重复键:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("apple", "banana", "apple", "orange");
// 使用toMap方法并提供合并函数来处理重复键
Map<String, String> fruitMap = fruits.stream()
.collect(Collectors.toMap(
fruit -> fruit,
fruit -> fruit,
(oldValue, newValue) -> oldValue + ", " + newValue
));
System.out.println(fruitMap);
}
}
```
输出结果为:
```
{orange=orange, apple=apple, banana=banana}
```
在上面的示例中,列表`fruits`包含了重复的键"apple"。通过提供一个合并函数`(oldValue, newValue) -> oldValue + ", " + newValue`,我们将重复键的值合并为一个字符串。最终的`fruitMap`包含了没有重复键的结果。
希望这可以帮助到你!如果有任何疑问,请随时提问。
阅读全文