[英]Java 8 Lambda List to Map<Int, List<String>>
I have a list of dto with following element. 我有一个带有以下元素的dto列表。 userSeqId
have duplicate values, userSeqId
具有重复值,
private int userSeqId;
private String firstName;
private String lastName;
private String acctAgencyNumber;
I am trying to use Java 8 Lambda to group by 'userSeqId' to a Map. 我正在尝试使用Java 8 Lambda将'userSeqId'分组到Map。
I want Map<Integer, List<String>>
where Key should be userSeqId
and Value is List of acctAgencyNumber
. 我想要Map<Integer, List<String>>
,其中Key应为userSeqId
,Value为acctAgencyNumber
List。
When I use 我用的时候
Map<Integer, List<UserBasicInfoDto>> superUserAcctMap = customerSuperUserList.stream()
.collect(Collectors.groupingBy(UserBasicInfoDto::getUserSeqId));
I get Map<Integer, List<UserBasicInfoDto>>
where key is userSeqId
but value is list of whole object. 我得到Map<Integer, List<UserBasicInfoDto>>
,其中key是userSeqId
但value是整个对象的列表。
There is a dedicated version of groupingBy()
for your use case: 您的用例有一个专用版本的groupingBy()
:
Map<Integer, List<String>> result = customerSuperUserList.stream()
.collect(Collectors.groupingBy(
UserBasicInfoDto::getUserSeqId,
Collectors.mapping(UserBasicInfoDto::getAcctAgencyNumber, toList())));
The key point of this is to use the helper mapping
collector, using which you can override the default groupingBy
behaviour. 关键是使用帮助程序mapping
收集器,您可以使用它来覆盖默认的groupingBy
行为。
你可以试试这个:
customerSuperUserList.stream().collect(Collectors.groupingBy(UserBasicInfoDto::getUserSeqId,Collectors.mapping(UserBasicInfoDto::getAcctAgencyNumber, Collectors.toList())));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.