【发布时间】:2015-04-10 18:21:03
【问题描述】:
是否可以直接将对象展开成流?
我目前的做法是:
private BigDecimal getNodeScore(Optional<Node> node) {
return node.map(Node::getBranches)
.orElseGet(Collections::emptySet)
.stream()
.filter(Branch::isValid)
.flatMap(Branch::getLeafs)
.map(Leaf::getScore)
.reduce(BigDecimal::ZERO, BigDecimal::add);
}
它工作得很好(是的,我知道它很丑......现在)但只是讨厌使用 orElseGet 和 steam 从 Optional 过渡到 Stream 所以我想知道是否有任何方法可以将 Optional 扩展到 Stream ?
我需要的是这样的:
private BigDecimal getNodeScore(Optional<Node> node) {
return node.mapToStream(Node::getBranches) // <-- Want something similar
.filter(Branch::isValid)
.flatMap(Branch::getLeafs)
.map(Leaf::getScore)
.reduce(BigDecimal::ZERO, BigDecimal::add);
}
我知道我总是可以创建一个辅助函数并将第一个调用包装成如下内容:
optionalToStream(node.map(Node::getBranches))
但仍然想知道是否有更优雅的方式。
【问题讨论】:
标签: java dictionary tree java-8 reduce