collectors如何获取某个元素值并去查询map
时间: 2024-03-09 16:46:09 浏览: 52
如果你需要在将流中的元素收集到Map中时,获取某个元素值并去查询另一个Map,可以使用Collectors.toMap()方法,并指定一个Lambda表达式或方法引用作为参数。
以下是一个例子,假设你有一个List<Person>和一个Map<String, Integer>,需要将Person列表按照name属性收集到Map中,并且在收集过程中需要查询Map,获取每个Person的score属性值:
```
List<Person> persons = ...
Map<String, Integer> scoreMap = ...
Map<String, Person> personMap = persons.stream()
.collect(Collectors.toMap(Person::getName, p -> {
int score = scoreMap.getOrDefault(p.getName(), 0);
p.setScore(score); // 将score属性值设置到Person对象中
return p;
}));
```
在上面的代码中,我们使用了Person::getName方法引用来指定将Person对象按照name属性收集到Map中,同时使用了Lambda表达式来获取scoreMap中对应的分数值,并将其设置到Person对象中。注意,在Lambda表达式中,我们使用了getOrDefault方法来避免在scoreMap中不存在对应键值时出现NullPointerException异常。
阅读全文