Java 8 - 从列表中过滤空字符串不起作用

2022-09-02 22:56:51

我想从字符串列表中删除一个空字符串。

以下是我使用流 API 尝试的内容:

list.stream().filter(item-> item.isEmpty()).collect(Collectors.toList());

之后,空字符串仍存在于列表中。我错过了什么?


答案 1

filter() 保留与谓词匹配的元素。所以你需要逆谓词:

list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList());

这也不会修改原始列表。它将创建原始列表的筛选副本。所以你需要

list = list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList());

如果要修改原始列表,则应使用

list.removeIf(item -> item.isEmpty());

或简称

list.removeIf(String::isEmpty);

答案 2

从java 11开始,有一个新的方法谓词::not

所以你可以这样写:

list.stream().filter(Predicate.not(String::isEmpty)).collect(Collectors.toList())

推荐