2017-08-15 118 views
1

我有一个dto的列表,其中包含以下元素。 userSeqId有重复的值,Java 8 Lambda List to Map <Int,List <String>>

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

我试图用Java 8 lambda来组由“userSeqId”的地图。

我想要Map<Integer, List<String>> 其中密钥应该是userSeqId和值是列表acctAgencyNumber

当我使用

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

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

+2

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#groupingBy-java.util.function.Function-java.util.stream.Collector- –

回答

2

没有为您的使用情况下,dedicated version of groupingBy()

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

这样做的关键是使用助手mapping收集器,使用它可以覆盖默认的groupingBy行为。

0

你可以试试这个:

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