Sve*_*dak 2 java mapping filter java-8 java-stream
我知道标题可能有点令人困惑,但我无法想出更好的标题,所以让我解释一下我的意思......
我有这段代码:
int spacing = Integer.MAX_VALUE;
for (Edge edge : edges) {
if (!union.connected(edge.getStart(), edge.getEnd())) {
spacing = Math.min(spacing, edge.getWeight());
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将此代码转换为java 8代码?
当然,第一步是过滤这很简单,但后来它变得很诡异,因为我必须spacing在Stream :: map方法中重用计算变量,我不知道这是否可能.
我不完全确定语法(我无法测试它),但它应该适用于这样的事情:
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);
Run Code Online (Sandbox Code Playgroud)
不确定比较器传递给min.
如果上面的代码不起作用,你可以mapToInt先(假设getWeight()返回int):
int spacing = edges.stream()
.filter(edge -> !union.connected(edge.getStart(), edge.getEnd()))
.mapToInt(Edge::getWeight)
.min ()
.orElse(Integer.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1165 次 |
| 最近记录: |