我知道标题可能有点令人困惑,但我无法想出更好的标题,所以让我解释一下我的意思......
我有这段代码:
int spacing = Integer.MAX_VALUE;
for (Edge edge : edges) {
if (!union.connected(edge.getStart(), edge.getEnd())) {
spacing = Math.min(spacing, edge.getWeight());
}
}
有没有办法将此代码转换为java 8代码?
当然,第一步是过滤,这很简单,但后来变得很诡异,因为我必须在Stream :: map方法中重用计算变量spacing
,我不知道是否可能。
答案 0 :(得分:5)
我不完全确定语法(我无法测试它),但它应该适用于这样的事情:
int spacing = edges.stream()
.filter(edge -> !union.connected(edge.getStart(), edge.getEnd()))
.min (Collectors.comparing(Edge::getWeight))
.map (Edge::getWeight) // get the weight of the min Edge
.orElse(Integer.MAX_VALUE);
不确定比较器是否传递给min
。
如果上面的代码不起作用,您可以先mapToInt
(假设getWeight()
返回int):
int spacing = edges.stream()
.filter(edge -> !union.connected(edge.getStart(), edge.getEnd()))
.mapToInt(Edge::getWeight)
.min ()
.orElse(Integer.MAX_VALUE);