java - 使用java流获取逗号分隔的字符串

标签 java java-8 java-stream

我有以下使用 java Stream 的代码。

我正在尝试使用 get 函数来构建一个值字符串:在本例中为“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
    ...
}

最佳答案

for 循环的每次迭代都会覆盖 separatedByComma 的值。第一次迭代将String“a”分配给它,第二次迭代将其替换为“b”。

您应该对 strings List 的元素进行 Stream 以便加入匹配的 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

关于java - 使用java流获取逗号分隔的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53295725/

相关文章:

java - Solr 不区分大小写的查询

java - Jquery 验证后表单未提交

java - 比较两个包含日期但需要忽略格式的字符串类型列表

java - 带参数的方法引用

csv - 在 Java 中解析大型 CSV 文件的最快最有效的方法

java - 数苹果和橙子

java - 内部类的构造函数引用在运行时因 VerifyError 而失败

java - 限制和无序流的内部变化

Java 8 - 映射值中的过滤器列表

java - Streams API::如何从 LIST<Object> 修改自定义对象的变量?