sta*_*low 10 java java-8 java-stream
我想从字符串列表中删除一个空字符串.
以下是我尝试使用流API的方法:
list.stream().filter(item-> item.isEmpty()).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
并且列表中仍然存在空字符串.我错过了什么?
JB *_*zet 27
filter() 保留与谓词匹配的元素.Soyou需要反向谓词:
list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
这也不会修改原始列表.它将创建原始列表的过滤副本.所以你需要
list = list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
如果要修改原始列表,则应使用
list.removeIf(item -> item.isEmpty());
Run Code Online (Sandbox Code Playgroud)
或者干脆
list.removeIf(String::isEmpty);
Run Code Online (Sandbox Code Playgroud)
从 java 11 开始有一个新方法 Predicate::not。
所以你可以这样写:
list.stream().filter(Predicate.not(String::isEmpty)).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
我怀疑你没有保留结果。结果返回,原始列表不会改变,因为这是函数式编程风格。
list = list.stream().filter(item-> !item.trim().isEmpty()).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)