我有3个选项:
Optional<T> optA = getOptA();
Optional<T> optB = getOptB();
Optional<T> optC = getOptC();
有没有更好的方法将它们连接到Stream<T>
,而不是:
Stream.concat(Stream.concat(optA.stream(), optB.stream()), optC.stream());
如果可选选项的数量增加,这很快就会变得不实用:
Stream.concat(Stream.concat(optA.stream(), optB.stream()), Stream.concat(optC.stream(), optD.stream());
发布于 2020-11-09 12:56:59
如何在使用reduce时使用Stream::of
和concat:
Stream.of(optA.stream(), optB.stream(), optC.stream(), optD.stream())
.reduce(Stream::concat)
.orElseGet(Stream::empty);
或者你可以使用地图,你的代码应该是:
Stream.of(optA, optB, optC, optD)
.map(Optional::stream)
.reduce(Stream::concat)
.orElseGet(Stream::empty);
这将引导您仅使用注释中提到的flatMap
来组合map和reduce:
Stream.of(optA, optB, optC)
.flatMap(Optional::stream);
https://stackoverflow.com/questions/64751999
复制