Optional<Long>totalLanding= ....(get it from somewhere);
Optional<Long>totalSharing = ...(get it from somewhere);
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情不是在语法上而是在逻辑上
Optional<Long>total = totalLanding+totalSharing;
Run Code Online (Sandbox Code Playgroud)
这样,如果两者都为空,则总计应该为空,如果其中一个具有该值,则总计应该具有该值,如果它们都具有该值,那么它们应该被添加并存储在总计中
使用Streams 怎么样?
Optional<Long> total = Stream.of(totalLanding,totalSharing)
.filter(Optional::isPresent)
.map(Optional::get)
.reduce(Long::sum);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我会使用OptionalLong而不是Optional<Long>.
解决方案将是类似的:
OptionalLong total = Stream.of(totalLanding,totalSharing)
.filter(OptionalLong::isPresent)
.mapToLong(OptionalLong::getAsLong)
.reduce(Long::sum);
Run Code Online (Sandbox Code Playgroud)
Java 9 或更新版本:
Optional<Long>total = Stream.concat(
totalLanding.stream(),
totalSharing.stream())
.reduce(Long::sum)
Run Code Online (Sandbox Code Playgroud)
Java 8 兼容变体:
Optional<Long>total = Stream.concat(
totalLanding.map(Stream::of).orElseGet(Stream::empty),
totalSharing.map(Stream::of).orElseGet(Stream::empty))
.reduce(Long::sum)
Run Code Online (Sandbox Code Playgroud)
或者更好地将其提取.map(Stream::of).orElseGet(Stream::empty)为实用方法并重用。或这里的其他变体:如何将 Optional<T> 转换为 Stream<T>?
| 归档时间: |
|
| 查看次数: |
646 次 |
| 最近记录: |