Java 8提供了一个Stream API,它可以让开发人员处理具有状态的集合。其中一个常见的问题是如何从Stream中过滤掉null值,下面是具体步骤和示例说明:
1. 使用filter()方法过滤null值
Stream的filter()
方法可以用于过滤掉Stream中的元素,只留下满足指定条件的元素。具体可以通过Lambda表达式实现。要过滤null值,只需要用Objects.nonNull()
方法作为filter()
的参数进行判断就可以了。
示例一:
List<String> list = Arrays.asList("John",null,"Marry","Tom",null,"Mike");
List<String> filterList = list.stream().filter(Objects::nonNull).collect(Collectors.toList());
System.out.println(filterList); // [John, Marry, Tom, Mike]
上述代码中,将字符串数组转换成List对象,然后使用filter()
方法去除null值。这里使用了方法引用的形式,即过滤条件为Objects::nonNull
,表示将null值过滤掉。最后使用Collectors.toList()
方法将Stream转换成List对象进行输出。
示例二:
List<Integer> nums = Arrays.asList(1, 2, 3, null, 4, 5, null, 6, null);
long count = nums.stream().filter(Objects::nonNull).count();
System.out.println(count); // 6
上述代码中,将数字数组转换成List对象,然后使用filter()
方法去除null值。同样,使用了方法引用的形式,即过滤条件为Objects::nonNull
。然后使用count()
方法统计剩余元素的数量。
2. 使用flatMap()方法过滤null值
使用flatMap()
方法也可以对Stream中的元素进行过滤,只不过需要先将Stream中的嵌套对象展开成单层对象,然后再过滤掉null值。具体可以通过Lambda表达式和Optional容器类实现。
示例三:
List<List<String>> lists = new ArrayList<>();
lists.add(Arrays.asList("John","Mike"));
lists.add(Arrays.asList(null,"Tom","Marry"));
lists.add(Arrays.asList("Jerry",null,"Sophie"));
List<String> results = lists.stream()
.flatMap(Collection::stream)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
System.out.println(results); // [John, Mike, Tom, Marry, Jerry, Sophie]
上述代码中,首先将字符串数组嵌套在List对象中,然后使用flatMap()
方法将嵌套的子集合展开成单层对象,之后使用filter()
方法和Optional容器类来过滤掉null值。最后使用Collectors.toList()
方法将Stream转换成List对象进行输出。
总之,这两种方式均可解决Stream中的null值过滤,选择合适的方式取决于具体情况。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java8如何从一个Stream中过滤null值 - Python技术站