Java 8 Lambda List to Map <int,list <string =“”>&gt;

时间:2017-08-15 16:23:00

标签: java lambda

我有一个带有以下元素的dto列表。 userSeqId有重复的值

private int userSeqId;
private String firstName;
private String lastName;
private String acctAgencyNumber;

我正在尝试使用Java 8 Lambda将'userSeqId'分组到Map。

我想要Map<Integer, List<String>> 其中Key应为userSeqId,Value为acctAgencyNumber的列表。

当我使用

Map<Integer, List<UserBasicInfoDto>> superUserAcctMap = customerSuperUserList.stream()
    .collect(Collectors.groupingBy(UserBasicInfoDto::getUserSeqId));

我得到Map<Integer, List<UserBasicInfoDto>>,其中键是userSeqId,但值是整个对象的列表。

2 个答案:

答案 0 :(得分:3)

您的用例有dedicated version of groupingBy()

Map<Integer, List<String>> result = customerSuperUserList.stream()
      .collect(Collectors.groupingBy(
        UserBasicInfoDto::getUserSeqId,
        Collectors.mapping(UserBasicInfoDto::getAcctAgencyNumber, toList())));

关键是要使用帮助器mapping收集器,您可以使用它来覆盖默认的groupingBy行为。

答案 1 :(得分:0)

你可以试试这个:

customerSuperUserList.stream().collect(Collectors.groupingBy(UserBasicInfoDto::getUserSeqId,Collectors.mapping(UserBasicInfoDto::getAcctAgencyNumber, Collectors.toList())));