将Long列表转换为Map,其中long项为键,String列为值

时间:2017-12-06 04:15:12

标签: 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*/
   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>>我应该更改什么才能获得预期的返回类型。

1 个答案:

答案 0 :(得分:1)

如果personIds包含不同的值,则您不需要使用groupingBy()。请改用toMap()

return personIds.stream()
        .collect(Collectors.toMap(Function.identity(), this::getTags));