使用Java 8在迭代List对象时删除空格

3
这是我的代码,它返回了空格和一些有效的字符串。但是,我的需求是无效化空格并仅收集字符串。
List<String> stateCodes = stateList.stream()
                                    .map(state-> physician.getStateDetails().getStateCode())
                                    .collect(Collectors.toList());
当我打印stateCodes时,它会返回:
[ ,  , 197, 148,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ]

我这里只需要 [197,148]。


2
使用过滤器方法,仅返回符合您需求的元素。 - jBuchholz
3个回答

7

过滤掉空值。我不确定你的输出中是否存在空的String。如果有,可以使用以下方法进行过滤:

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

注意: 您可以添加trim()(在mapfilter步骤中)来过滤掉仅包含空格的字符串Strings:

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

2
好的回答。只有一个疑问,如果 physician.getStateDetails().getStateCode() 中有空格呢? - Sudhir Ojha
2
在这种情况下,您必须将过滤器谓词更改为类似s -> !s.trim().isEmpty()的内容。 - Eran
1
.map(...)中不需要使用trim(),也不需要从filter(...)中将其删除。 - Hadi J
@HadiJ 我错过了那个修改,那是另一个用户的编辑。你是正确的。 - Eran
1
或者使用Java11中的filter(String::isBlank) - Youcef LAIDANI
显示剩余2条评论

2

首先,您应该对字符串进行修剪,然后再按isEmpty进行过滤并收集。


0

我会做:

List<String> stateCodes =
stateList.stream()
         .map(state-> physician.getStateDetails().getStateCode())
         .filter(s -> !s.trim().isEmpty())
         .collect(Collectors.toList());
  • 我在数据上添加了一个过滤器,并删除了空数据 - 仅在谓词中使用了修剪。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,