Collectors.toMap 获取对象map
时间: 2023-11-24 16:53:33 浏览: 89
在Java 8中,可以使用Collectors.toMap()方法将一个对象列表转换为Map。下面是一个示例代码,其中Person类具有id和name属性:
```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, "Jane"),
new Person(3, "Adam"),
new Person(4, "Tom")
);
Map<Integer, String> idToNameMap = persons.stream()
.collect(Collectors.toMap(Person::getId, Person::getName));
System.out.println(idToNameMap);
}
}
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;
}
}
```
在上面的示例中,我们使用Collectors.toMap()方法将Person对象列表转换为id到name的映射。Person::getId和Person::getName是方法引用,用于从Person对象中提取id和name属性。
如果对象列表中存在重复的键,则会抛出IllegalStateException异常。如果您想要选择第一个值而不是抛出异常,则可以使用下面的代码:
```java
Map<Integer, Person> idToPersonMap = persons.stream()
.collect(Collectors.toMap(Person::getId, person -> person, (existing, replacement) -> existing));
```
在上面的代码中,我们使用了一个合并函数,它选择了现有的值而不是替换它们。这个函数的签名是BinaryOperator<U>,其中U是值的类型。在这个例子中,U是Person类型。
阅读全文