Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';使用Java8在lambda内部使用时,避免null的最佳方法是什么?_Java_Lambda_Java 8 - Fatal编程技术网

什么';使用Java8在lambda内部使用时,避免null的最佳方法是什么?

什么';使用Java8在lambda内部使用时,避免null的最佳方法是什么?,java,lambda,java-8,Java,Lambda,Java 8,我有这段代码,我试图找出使用Java8避免空指针异常的最佳方法是什么 promotion.forEach(item -> item.getDiscount().getPromotions().forEach(promotion -> { // logic code here }) ); 在逻辑代码中使用空元素之前,您可以过滤掉所有空元素,以便只有非空元素才能运行逻辑代码。您是否在考虑类似于: 编辑:如果item.getDiscount()可能为空,则

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

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

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

您是否在考虑类似于:

编辑:如果
item.getDiscount()
可能为空,则可以尝试:

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

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

您没有返回null,而是有几个选项:

  • 抛出一个解释。例如,如果一个方法的输入导致被零除,您可以抛出一个异常,而不是返回null
  • 返回一个空的可选值。例如,返回字符串的方法可以更改为返回可选的。如果没有要返回的字符串,则返回Optional.empty()
  • 返回空集合(例如,当结果类型为列表时,如果未找到结果,则返回空列表,而不是返回null)
  • 返回能够反映结果的自定义结果类型。例如,在执行验证时,可以返回表示成功/失败和错误消息的ValidationResult,而不是在没有错误时返回空错误消息

潜在的NPE在哪里?与lambdas的联系是什么?小心-这里有两个名为
promotion
的变量。您可以使用
Optional。ofNullable
Optional
专门包含在Java平台库中,用于处理流中可能出现
null
值的情况。最好的方法是不要使用null值。是是否需要.filter(折扣-折扣!=null)?.map(discount->discount.getPromotions())不起作用吗?如果item.getDiscount()返回null,那么在执行.map(discount.getPromotions())时,您将得到一个NPE,除非您首先过滤掉null折扣值。我认为,折扣类的设计应确保从不从像getPromotions这样的收集方法返回null;当促销为零时,始终返回一个空集合。完美答案,以便foreach不会抛出空指针异常。在.getPromotions()上,它将引发NPE不?
item.getDiscount().getPromotions().stream().forEach(promotion ->     
    Optional.ofNullable(promotion).ifPresent(p -> {
        // logic code 
    } )
);
Optional.ofNullable(item.getDiscount()).ifPresent(d -> 
    d.getPromotions().stream().forEach(promotion ->     
        Optional.ofNullable(promotion).ifPresent(p -> {
            // logic code 
        } )
    )
);