加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java-8 – 可选不处理null元素

发布时间:2020-12-15 04:45:49 所属栏目:Java 来源:网络整理
导读:当我试验Optional T时不处理null元素,因此在下面的示例中,它会在最后一个语句中抛出NullPointerException: ListString data = Arrays.asList("Foo",null,"Bar");data.stream().findFirst().ifPresent(System.out::println);data.stream().skip(1).findFirst
当我试验Optional< T>时不处理null元素,因此在下面的示例中,它会在最后一个语句中抛出NullPointerException:

List<String> data = Arrays.asList("Foo",null,"Bar");
data.stream().findFirst().ifPresent(System.out::println);
data.stream().skip(1).findFirst().ifPresent(System.out::println);

所以,我仍然必须显式处理null并过滤非null元素,例如:

data.stream()
    .filter(item -> item != null)
    .skip(1)
    .findFirst()
    .ifPresent(System.out::println);

是否有任何替代方法可以避免显式处理null:item!= null

解决方法

这真的取决于你想做什么.如果要将null视为有效值,则答案与要跳过空值的答案不同.

如果您想在流中保留“nulls”:

List<String> data = Arrays.asList("Foo","Bar");
    data.stream().map(Optional::ofNullable).findFirst().flatMap(Function.identity()).ifPresent(System.out::println);  ;
    data.stream().map(Optional::ofNullable).skip(1).findFirst().flatMap(Function.identity()).ifPresent(System.out::println);

如果要从流中删除空值,请使用data.stream().filter(Objects :: nonNull)将其过滤掉(或者如您所说o – > o!= null,无论您喜欢什么.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读