我有一个人
class Person{
private Long id;
private String firstName;
private String lastName;
//with getters and setters
}
我有一个以下方法接收一个人的id并返回一个与该人相关联的标签列表
public List<String> getTags(Long personId){
/*ExampleImplementation*/
someCollection.stream()
.filter(Objects::nonNull)
.map(SomeType::someMethod)
.filter(Objects:nonNull)
.collect(Collectors.toList());
}
我正在构建一个方法,以获取所有personId的映射以及与personId关联的标记列表。
public Map<Long, List<String>>getPersonTags(List<Long> personIds){
return personIds.stream()
.collect(Collectors.groupingBy(
(personId) -> personId,
Collectors.mapping(this::getTags, Collectors.toList())));
}
但getPersonTags()
正在返回Map<Long, List<List<String>>>
,但我希望Map<Long, List<String>>
我应该更改什么才能获得预期的返回类型。
答案 0 :(得分:1)
如果personIds
包含不同的值,则您不需要使用groupingBy()
。请改用toMap()
:
return personIds.stream()
.collect(Collectors.toMap(Function.identity(), this::getTags));