Java 8 - 从列表中过滤空字符串不起作用
2022-09-02 22:56:51
我想从字符串列表中删除一个空字符串。
以下是我使用流 API 尝试的内容:
list.stream().filter(item-> item.isEmpty()).collect(Collectors.toList());
之后,空字符串仍存在于列表中。我错过了什么?
我想从字符串列表中删除一个空字符串。
以下是我使用流 API 尝试的内容:
list.stream().filter(item-> item.isEmpty()).collect(Collectors.toList());
之后,空字符串仍存在于列表中。我错过了什么?
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);
从java 11开始,有一个新的方法谓词::not。
所以你可以这样写:
list.stream().filter(Predicate.not(String::isEmpty)).collect(Collectors.toList())