使用 java 8 引入的 stream api 中的 filter() 方法可以过滤满足条件的元素。具体做法是调用集合的 .stream() 方法获取流,接着链式调用 .filter(predicate) 传入判断逻辑,最后通过 .collect(collectors.tolist()) 将结果收集为新的 list。这种方式不会修改原始列表,而是返回一个包含符合条件元素的新列表。

如何过滤出列表中所有偶数?
要过滤出列表中所有的偶数,可以使用 Integer::intValue % 2 == 0 作为过滤条件。这会将原始列表中的奇数剔除,只保留能被 2 整除的元素。

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<integer> numbers = new ArrayList();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
List<integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers); // [2, 4]
}
}</integer></integer>
如何过滤掉空字符串或 null 值?
如果目标是清理包含 null 或空字符串的列表,可以使用 Objects.nonNull() 结合 String::isEmpty 进行双重过滤。这样可以确保最终得到的列表既没有空引用,也没有长度为 0 的字符串。

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<string> strings = new ArrayList();
strings.add("hello");
strings.add(null);
strings.add("");
strings.add("world");
List<string> validStrings = strings.stream()
.filter(Objects::nonNull)
.filter(s -> !s.isEmpty())
.collect(Collectors.toList());
System.out.println(validStrings); // [hello, world]
}
}</string></string>
过滤后的新列表是否会影响原列表?
过滤操作生成的新列表与原列表是完全独立的对象。对过滤后的新列表进行添加、删除或修改操作,绝对不会影响原始的 ArrayList。这是因为 Stream 的处理过程是基于中间操作和终端操作的,它读取源数据并产生输出,但不改变源数据结构。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











