当前位置: 首页 > 知识库问答 >
问题:

使用Java 8避免在lambda内部使用null的最佳方法是什么?[重复]

焦苏燕
2023-03-14

我有这段代码,我试图找出什么是最好的方法来避免空指针异常使用Java8?

promotion.forEach(item ->
    item.getDiscount().getPromotions().forEach(promotion -> {
        // logic code here
    })
);

共有3个答案

邵劲
2023-03-14

你是否在考虑诸如可选:

item.getDiscount().getPromotions().stream().forEach(promotion ->     
    Optional.ofNullable(promotion).ifPresent(p -> {
        // logic code 
    } )
);

编辑:如果item.get折扣()可能为空,那么您可以尝试:

Optional.ofNullable(item.getDiscount()).ifPresent(d -> 
    d.getPromotions().stream().forEach(promotion ->     
        Optional.ofNullable(promotion).ifPresent(p -> {
            // logic code 
        } )
    )
);
艾俊悟
2023-03-14
promotion.stream()
    .map(item->item.getDiscount()).filter(Objects::nonNull)
    .map(discount->discount.getPromotions()).filter(Objects::nonNull)
    .forEach(innerPromotion->{//logic code});

在逻辑代码中使用空元素之前,您可以过滤掉所有空元素,以便只有非空元素才能运行逻辑代码。

钮晟
2023-03-14

避免NullPointerExceptions的最佳方法是避免空值。在您的示例中,确保所有方法永远不会返回null。

而不是返回null你有几个选项:

  • 抛出一个例外。例如,如果一个方法的输入导致被零除,你可以抛出一个异常而不是返回null
  • 返回一个空的可选值。例如,可以将返回字符串的方法更改为返回可选字符串
 类似资料:
  • 我在android fragment中找到了许多避免内存泄漏的方法,但哪种方法是最好的? 1.将视图设置为null时onDestRoyView被调用 2.将所有子视图设置为null并删除该视图

  • 我正在一个项目,需要处理成千上万的活动套接字并发连接。现在我正在查看内存使用和V8引擎,我使用的是Node.js V0.10.19(稳定)

  • 问题内容: 我使用Java在Selenium WebDriver中编写了一些测试用例,并在网格(集线器和多个节点)上执行它们。我注意到有一些测试案例由于导致失败。避免并确保始终找到该元素的最佳且可靠的方法是什么? 问题答案: 您永远无法确定会找到该元素,实际上这是功能测试的目的- 告诉您页面上是否有任何更改。但有一两件事肯定是有帮助是添加等待这往往导致元素像

  • 我有一个变量(testvariable),根据变量的isNull,我需要做一个方法调用,如下所示 在可选的

  • 让我们看一下使用两种不同的方式去计算单词的个数,第一种方式使用 reduceByKey 另外一种方式使用 groupByKey: val words = Array("one", "two", "two", "three", "three", "three") val wordPairsRDD = sc.parallelize(words).map(word => (word, 1)) val

  • null本身不是对象,也不是Objcet的实例 问题: null代表不确定的对象, 是一个很模糊的概念, 容易产生二义性 Map.get(key)若返回value值为null,其代表的含义可能是该键指向的value值是null,亦或者该键在map中并不存在 优点: 从内存消耗和效率方面,null更加廉价 优化: Optional com.google.common.base.Optional Op