使用 Java 8 进行迭代时从列表对象中删除空间

Sye*_*yed 3 java java-8 java-stream

这是我的代码,它返回空格和一些有效字符串。但是,我的要求是使空间无效并仅收集字符串

List<String> stateCodes = stateList.stream()
                                    .map(state-> physician.getStateDetails().getStateCode())
                                    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

当我打印 stateCodes 时,它返回

[ ,  , 197, 148,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ]
Run Code Online (Sandbox Code Playgroud)

这里我只需要 [197,148]

Era*_*ran 7

过滤掉空值。我不确定String您的输出中是否为空。如果是,您可以使用以下方法过滤掉它们:

List<String> stateCodes =
    stateList.stream()
             .map(state-> physician.getStateDetails().getStateCode())
             .filter(s -> !s.isEmpty())
             .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

注意:您可以添加trim()(到mapfilter步骤)以过滤掉String仅包含空格的 s:

List<String> stateCodes =
    stateList.stream()
             .map(state-> physician.getStateDetails().getStateCode().trim())
             .filter(s -> !s.isEmpty())
             .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • 好答案。只有一个人怀疑“Physician.getStateDetails().getStateCode()”是否有空格。 (2认同)
  • @SudhirOjha在这种情况下,您必须将过滤器谓词更改为“s -&gt; !s.trim().isEmpty()”之类的内容 (2认同)