2017-11-01 17 views
2

私は、bankId、IdentifierIdおよびIdentifierValueで構成されるオブジェクトのリストを持っています。各銀行について、私は複数のidentifierValueを持っています。私の要求は、bankIdに基づいてListをグループ化してマップを作成し、identifierValueを/で区切られた単一の文字列に結びつけることです。Java 8ストリームは、区切り文字を使用して文字列を連結して連結します。

例えば:私は結果が

bank of America -> 123/234 
wellsForgo -> 123 

クラス以下のようなマップになりたい

Bank of America, identifer-1, 123 
Bank of America, identifer-2, 234 
wells Forgo,  identifier-1, 123 

public class BankIdentifier { 
    private String bankId; 
    private String identifierId; 
    private String identifierValue; 
} 

私は、Java 8つのストリームGROUPBYを使用していますが、私は思います識別子の値を取得することができません/

+0

既存のコードを表示できますか? – dash2

+1

なぜスラッシュセパレータが必要ですか?それは単なるレンダリングの問題です。ボックスの外でサポートされているオブジェクトのリストにマップされた名前でグループ化する方が良いです。リストをidentifierValuesのスラッシュで区切られたリストとしてレンダリングすることは、stream-> map-> collect(join)を使用することで簡単です。 – Bohemian

+0

これまでに何を試みましたか? – seal

答えて

3

これは、bankIdidentifierValueに基づいてリストをグループ化し、/区切り文字で区切られた単一の文字列にグループ化します。

Map<String, String> result = 
       items.stream().collect(
         Collectors.groupingBy(BankIdentifier::getBankId, 
           Collectors.mapping(BankIdentifier::getIdentifierValue, Collectors.joining("/"))) 
         ); 

あなたはメソッドの参照構文を使用するためにbankIdidentifierValueのgetterを持っていることを確認してください。

+1

ありがとうございました。 – rroy

2

あなたはストリームを使用して、収集、によってグループ化、マッピングおよびAominè's answerのように参加、またはあなたが流れずにそれを行うことができますすることができます

Map<String, String> result = new HashMap<>(); 
bankIdentifiers.forEach(b -> 
    result.merge(b.bankId, b.identifierValue, (o, n) -> o + "/" + n)); 

これは、識別子の値を連結するMap.mergeメソッドを使用しています。

関連する問題