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

新手上路,请多包涵

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

这是我尝试过的,使用流 API:

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

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

原文由 Alexander Nikolov 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 531
2 个回答

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);

原文由 JB Nizet 发布,翻译遵循 CC BY-SA 3.0 许可协议

自 java 11 以来,有一个新方法 Predicate::not

所以你可以这样写:

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

原文由 lczapski 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题