Java 8 stream get()在方法内部或外部可选?
我想知道在方法内部或外部使用get()是否有任何区别,以及哪种方法更好。我对stream进行操作,并返回其结果,以便在另一个类中对其进行操作
例如:
class FirstClass{
//...
public static Optional<MyObject1> myMethod(MyObject2 myObject2) {
return map.entrySet()
.stream()
.filter(a -> Objects.equals(a.getValue(), myObject2))
.map(Map.Entry::getKey)
.findFirst();
}
}
然后在第二节课上:
//...
MyObject1 myObject1 = firstClass.myMethod(myObject2).get();
或者:
class FirstClass{
//...
public static MyObject1 myMethod(MyObject2 myObject2) {
return map.entrySet()
.stream()
.filter(a -> Objects.equals(a.getValue(), myObject2))
.map(Map.Entry::getKey)
.findFirst()
.get();
}
}
以及:
//...
MyObject1 myObject1 = firstClass.myMethod(myObject2);
# 1 楼答案
第一种解决方案更好
FirstClass
只是提供了一种方法,而不知道如何使用它。它只是做它应该做的事情,在争论中没有太多的规定性如果调用者想在
get
上失败,这取决于调用者。更好的是,调用方可能希望处理空的案例并返回一个特定的错误或做进一步的工作# 2 楼答案
java可选类型是为了防止
NullPointerExceptions
。对空可选项调用#get()
(可能是#firstFirst()
的结果)将导致在运行时抛出NoSuchElementException
。为了避免这个问题,最好先检查if(myObject1.isPresent())
或myObject1.ifPresent(unwrappedMyObject1 -> { ... });
如果你不想用这种方式使用选项,以上两种方法都可以