Java 将Long列表转换为以Long item为键、以String列表为值的映射
我有一个人Java 将Long列表转换为以Long item为键、以String列表为值的映射,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个人 class Person{ private Long id; private String firstName; private String lastName; //with getters and setters } 我有一个下面的方法,它接收一个人的id并返回一个与这个人相关联的标签列表 public List<String> getTags(Long personId){ /*ExampleImplementation*/ someCol
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());
}
公共列表getTags(长personId){
/*示例实现*/
someCollection.stream()
.filter(对象::非空)
.map(SomeType::someMethod)
.filter(对象:非空)
.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(列出人名){
return personIds.stream()
.collect(收集器.groupingBy(
(personId)->personId,
Collectors.mapping(this::getTags,Collectors.toList());
}
但是
getPersonTags()
正在返回一个Map
,但是我希望返回一个Map
,我应该更改什么来获得预期的返回类型。如果personIds
包含不同的值,则不需要使用groupingBy()
。改用toMap()
:
return personIds.stream()
.collect(Collectors.toMap(Function.identity(), this::getTags));
为什么
getTags()
不使用personId
?您的personId是否不同?如果是这样,只需使用Collectors.toMap()
@shmosel编辑我的评论:在集合中没有人不是唯一的。这就是我尝试使用Collection.groupingBy的原因,因为出现了“重复密钥”错误。我编辑了我对您的问题的评论:在我拥有的集合中,没有人不是唯一的。这就是我必须尝试Collection.groupingBy的原因,因为出现了“重复密钥”错误。很抱歉之前的信息有误