Collectors.toMap value有多个
时间: 2023-10-17 17:30:45 浏览: 95
当使用`Collectors.toMap`方法构建一个Map时,如果存在多个相同的键,可以使用合并函数来确定对应的值。合并函数接收两个参数,即旧值和新值,并返回合并后的结果。例如,可以使用`Collectors.toMap`方法的重载版本,该版本接受一个合并函数作为参数。以下是一个示例:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(
new Person(1, "John"),
new Person(2, "Mary"),
new Person(3, "John")
);
Map<Integer, String> map = persons.stream()
.collect(Collectors.toMap(
Person::getId,
Person::getName,
(existingValue, newValue) -> existingValue + ", " + newValue
));
System.out.println(map);
}
static class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
}
}
```
在上面的示例中,我们有三个Person对象,其中两个对象具有相同的id。我们使用`Collectors.toMap`方法将Person的id作为键,Person的name作为值构建了一个Map。由于存在相同的键,我们使用合并函数`(existingValue, newValue) -> existingValue + ", " + newValue`将相同键的值合并为一个字符串。输出结果为:`{1=John, 2=Mary, 3=John}`。
阅读全文