2017-08-15 139 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())));