java 8 steam 对象转map
时间: 2023-09-15 09:19:01 浏览: 111
在Java 8中,可以使用Stream API将对象列表转换为Map。下面是一个示例代码:
假设我们有一个Person类:
```
public class Person {
private String name;
private int age;
// getters and setters
}
```
现在我们有一个Person对象的列表,我们想将它们转换为一个Map,其中键是名称,值是年龄。
```
List<Person> people = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 35)
);
Map<String, Integer> map = people.stream()
.collect(Collectors.toMap(Person::getName, Person::getAge));
System.out.println(map);
```
输出结果为:
```
{Bob=30, Charlie=35, Alice=25}
```
在上面的代码中,我们使用`Collectors.toMap()`方法将流中的元素转换为Map。该方法接受两个Function作为参数,一个用于提取键,另一个用于提取值。在这个例子中,我们使用Person对象的getName()和getAge()方法作为键和值。
需要注意的是,如果列表中存在重复的键,则会抛出IllegalStateException异常。为了解决这个问题,我们可以向`Collectors.toMap()`方法传递一个合并函数,例如:
```
Map<String, Integer> map = people.stream()
.collect(Collectors.toMap(Person::getName, Person::getAge, (age1, age2) -> age1));
```
在这个例子中,我们传递了一个合并函数,它简单地选择第一个年龄。
阅读全文