我想知道在方法内部或外部使用get()时是否存在任何差异以及哪种想法更好。我在流上操作,并返回其结果以在其他类中对其进行操作。
例如:
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();
OR:
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);
答案 0 :(得分:2)
第一种解决方案更好。
FirstClass
只是提供了一种方法,却不知道如何使用它。它只是做它应该做的事情,而不是在论证上过于规范。
如果愿意,调用者可以在get
上失败。更好的是,调用者可能希望处理空案例并返回特定错误或进一步工作。
答案 1 :(得分:1)
java可选类型是为了阻止NullPointerExceptions
。在空的可选项(#get()
的可能结果)上调用#firstFirst()
将导致在运行时抛出NoSuchElementException
。为避免此问题,最好先检查if(myObject1.isPresent())
或myObject1.ifPresent(unwrappedMyObject1 -> { ... });
。
如果您不想以这种方式使用选项,那么上述任何一种方法都可以。