void doSomething(int x){
Stream<Long> stream = someUtil.getSomething(x);
}
假设我有一个实用程序函数someUtil.getSomeStream(x)
,它返回的流最大为1。
class SomeUtil { /* Returns Stream<Long>, the stream can have size at most 1 */ public static Stream<Long> getSomething(x){ Optional<Long> opt = doSomethingWithXAndReturnOptional(x); return opt.map(Stream::of).orElse(Stream.empty()); } }
我正在争论的是是否要使此方法返回一个最大大小为1的Stream<Long>
而不是返回一个Optional<Long>
,调用者将按如下方式进行转换:
void doSomething(int x){ Stream<Long> stream = Stream.of(someUtil.getSomething(x).get()); //convert to stream ourselves as the caller }
[目前,我们只有一个呼叫者doSomething(int x)
,但此呼叫者(很可能是将来的呼叫者)更容易期待一个Stream。同时,我们总是返回大小为1的流可能会产生误导。这里的正确,可读性,可维护性和最少混乱的方法是什么?
您可以根据需要使用Optional :: stream和Stream :: findFirst在两者之间进行转换。(java 9 https://docs.oracle.com/javase/9/docs/api/java/util/Optional.html#stream--)。