Java 8 – 从一个 Stream中过滤null值

50 篇文章 2 订阅

 

复习一个Stream 包含 null 数据的例子.

Java8Examples.java

 
  1. package com.mkyong.java8;

  2.  
  3. import java.util.List;

  4. import java.util.stream.Collectors;

  5. import java.util.stream.Stream;

  6.  
  7. public class Java8Examples {

  8.  
  9. public static void main(String[] args) {

  10.  
  11. Stream<String> language = Stream.of("java", "python", "node", null, "ruby", null, "php");

  12.  
  13. List<String> result = language.collect(Collectors.toList());

  14.  
  15. result.forEach(System.out::println);

  16.  
  17. }

  18. }

output

java
python
node
null   // <--- NULL
ruby
null   // <--- NULL
php

Solution(解决)

为了解决上面的问题,我们使用: Stream.filter(x -> x!=null)

Java8Examples.java

 
  1. package com.mkyong.java8;

  2.  
  3. import java.util.List;

  4. import java.util.stream.Collectors;

  5. import java.util.stream.Stream;

  6.  
  7. public class Java8Examples {

  8.  
  9. public static void main(String[] args) {

  10.  
  11. Stream<String> language = Stream.of("java", "python", "node", null, "ruby", null, "php");

  12.  
  13. //List<String> result = language.collect(Collectors.toList());

  14.  
  15. List<String> result = language.filter(x -> x!=null).collect(Collectors.toList());

  16.  
  17. result.forEach(System.out::println);

  18.  
  19.  
  20. }

  21. }

output

java
python
node
ruby
php

另外,过滤器还可以用: Objects::nonNull

 
  1. import java.util.List;

  2.  
  3. List<String> result = language.filter(Objects::nonNull).collect(Collectors.toList());

References

  1. Objects::nonNull JavaDoc
  2. Java 8 Streams filter examples
  3. Java 8 Collectors JavaDoc
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当然,下面是 Java 8 几个主要特性的具体例子: 1. Lambda 表达式: ```java List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.forEach(n -> System.out.println(n)); ``` 上面的代码使用 Lambda 表达式来遍历列表的元素,并打印每个元素的。 2. Stream API: ```java List<String> fruits = Arrays.asList("apple", "banana", "orange", "grape", "watermelon"); List<String> filteredFruits = fruits.stream() .filter(fruit -> fruit.length() > 5) .collect(Collectors.toList()); ``` 上面的代码使用 Stream API 对水果列表进行过滤,只保留长度大于 5 的水果,并将结果收集到一个新的列表。 3. 接口的默认方法和静态方法: ```java interface Vehicle { default void start() { System.out.println("Starting the vehicle..."); } static void honk() { System.out.println("Honking the horn..."); } } class Car implements Vehicle { // 可以不实现 start 方法,使用默认的实现 // 可以直接调用接口的静态方法 public void soundHorn() { Vehicle.honk(); } } ``` 上面的代码展示了接口的默认方法和静态方法的使用。`Vehicle` 接口定义了一个默认的 `start` 方法和一个静态的 `honk` 方法。`Car` 类实现了 `Vehicle` 接口,并可以直接调用接口的静态方法。 4. Optional 类: ```java Optional<String> name = Optional.ofNullable(null); String result = name.orElse("Unknown"); System.out.println(result); ``` 上面的代码使用 Optional 类来包装一个可能为 null。如果存在,则返回该,否则返回默认 "Unknown"。 这些例子只是展示了 Java 8 一些特性的用法,实际上 Java 8 还有其他很多新特性,如方法引用、新的日期/时间 API 等。你可以根据具体需求来选择使用和深入学习这些特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值