在 Java8 中使用流时,我们是否应该始终检查 Optional?

Should we always check for Optional when using streams in Java8?

方法get() 总是在我的intellij idea 中被标记。编译器说我也应该使用方法 isPresent。我的同事说我不应该关注那个通知。不管怎样,我决定在这里问一下。

    List<Integer> list  = new ArrayList<>();
    list.add(5);
    list.add(6);
    list.add(4);
    list.add(7);
    list.add(3);
    int result = list.stream().reduce((accumulator,element) ->
    accumulator*element).get(); // this get() is mentioned above

reduce 的结果是可选的。 Optional.get 方法可能会抛出错误:documentation 如果值不存在。在你的情况下它存在并且似乎可以忽略警告。

在某些情况下,您可能会将 List 作为该方法的输入参数。在这些情况下,您需要在 运行 您的 reduce 方法之前检查它是否为空,或者通过 isPresent 方法检查 Optional 是否具有值避免这个异常 NoSuchElementException

首先尝试创建一个 Optional,然后在检查 isPresent 后 get() 它。

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class Test {
    public static void main(String[] args) {
        List<Integer> list  = new ArrayList<>();
        list.add(5);
        list.add(6);
        list.add(4);
        list.add(7);
        list.add(3);
        int result = 0;
        Optional<Integer> optional = list.stream().reduce((accumulator, element) -> accumulator*element);
        if(optional.isPresent()) {
            result = optional.get();
        }
        System.out.println(result);
    }
}