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