zao*_*oer 6 java java-8 java-stream
我有以下代码使用java Stream。
我正在尝试获取该函数来构建值字符串:在这种情况下为“ a,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
...
}
Run Code Online (Sandbox Code Playgroud)
循环的每次迭代都会for覆盖的值separatedByComma。第一次迭代将String“ a” 分配给它,第二次迭代将其替换为“ b”。
您应该Stream在的元素上方strings List,以便将String与每个元素匹配的s 连接到单个输出中String:
String separatedByComma =
strings.stream()
.flatMap(word -> occList.stream()
.filter(occ -> word.equalsIgnoreCase (occ.getOccSCd()))
.map (occ -> occ.getOccSNm()))
.collect(Collectors.joining (","));
Run Code Online (Sandbox Code Playgroud)
输出:
a,b
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
741 次 |
| 最近记录: |