一个元素流的最佳实践是什么? [关闭]

问题描述 投票:0回答:1
假设我有方法

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的流可能会产生误导。

这里的正确,可读性,可维护性和最少混乱的方法是什么?

java
1个回答
1
投票
如果您的方法契约是流式处理,则返回Stream更具可读性。

您可以根据需要使用Optional :: stream和Stream :: findFirst在两者之间进行转换。(java 9 https://docs.oracle.com/javase/9/docs/api/java/util/Optional.html#stream--)。

© www.soinside.com 2019 - 2024. All rights reserved.