我有一个带有以下元素的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
,但值是整个对象的列表。
答案 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())));