如果想要按照我们的要求过滤一个list中的数据,比如list中有 [1,2,3] 三个数据
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
过滤出小于3的数据
public class Test01
{
public static void main(String[] args)
{
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
List<Integer> collect = list.stream().filter(f -> f < 3).collect(Collectors.toList());
System.out.println(collect);
}
}
输出:
[1, 2]
但当list中如果有null数据时,会抛出nullPointException
public class Test01
{
public static void main(String[] args)
{
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(null);
list.add(3);
List<Integer> collect = list.stream().filter(f -> f < 3).collect(Collectors.toList());
System.out.println(collect);
}
}
Exception in thread "main" java.lang.NullPointerException
at test1.Test01.lambda$main$0(Test01.java:15)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at test1.Test01.main(Test01.java:15)
解决方法:加入过滤条件Objects::nonNull,这个条件会帮助去除为null的对象
public static void main(String[] args)
{
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(null);
list.add(3);
List<Integer> collect = list.stream().filter(Objects::nonNull).filter(f -> f < 3).collect(Collectors.toList());
System.out.println(collect);
}
输出:
[1]