Javaストリームを使用してカンマ区切りの文字列を取得

zaozaoer:

私はJavaを使用して、次のコードを持っていますStream

この場合には「B」:私は、値の文字列を構築するための機能を入手しようとしています。しかし、(出力separatedByCommaこのケースでは)常に「B」です。

誰かがいくつかの光を当てるしてくださいもらえますか?

@Test
public void testJoin() {
    List<MOccS> occList = new ArrayList<> (  );
    MOccS mOccS = new MOccS ();
    mOccS.setOccSCd ( "1" );
    mOccS.setOccSNm ( "a" );
    occList.add ( mOccS );

    MOccS mOccS2 = new MOccS ();
    mOccS2.setOccSCd ( "2" );
    mOccS2.setOccSNm ( "b" );
    occList.add ( mOccS2 );


    List<String> strings = new ArrayList<> (  );
    strings.add ( "1" );
    strings.add ( "2" );

    String separatedByComma = "";
    for(String word: strings) {
        separatedByComma = occList.stream ()
                                  .filter ( occ -> word.equalsIgnoreCase ( occ.getOccSCd () ) )         
                                  .map ( occ -> occ.getOccSNm () )
                                  .collect ( Collectors.joining ( "," ) );
     }

     System.out.println (separatedByComma);
}


class MOccS{
    String occSCd;
    String occSNm;
    ...
    getter/setter
    ...
}
彼らは次のとおりでした:

お使いの各反復forループは、の値を上書きしますseparatedByComma最初の反復は、割り当てString「B」でそれをそれに「」、および第二置き換えます。

あなたは、必要があるStreamの要素の上にstrings List参加するために、String単一の出力にそれらのそれぞれを一致秒String

String separatedByComma = 
    strings.stream()
           .flatMap(word -> occList.stream()
                                   .filter(occ -> word.equalsIgnoreCase (occ.getOccSCd()))
                                   .map (occ -> occ.getOccSNm()))
           .collect(Collectors.joining (","));

出力:

a,b

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=167489&siteId=1