2017-08-15 23 views
1

私は以下の要素を持つdtoのリストを持っています。 userSeqIdは、私が地図に「userSeqId」でグループへのJava 8のラムダを使用しようとしていますJava 8ラムダリストマップ<Int、リスト<String>>

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

、重複する値を持っています。

私が望むMap<Integer, List<String>> ここで、キーはuserSeqIdで、値はacctAgencyNumberの値でなければなりません。

私は

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

を使用する場合、私は鍵がuserSeqIdですが、値はオブジェクト全体のリストであるMap<Integer, List<UserBasicInfoDto>>を取得します。

+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()))); 
関連する問題