在 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);
}
}
方法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);
}
}