Nat*_*H06 3 java min comparator java-8 java-stream
我正在寻找一个Comparator
写信给里面放一个min
在stream
上一集,让我们只说这是一个List<Node>
.通常我只是将列表中的对象相互比较,但我的问题是我有一个<Node>
在集合之外,我需要返回集合中节点的最小值,因为它们与父节点.
我有一个对象 Node
public class Node {
private int cost;
private int location;
public int getCost() { return cost }
}
Run Code Online (Sandbox Code Playgroud)
我使用外部函数将集合中的节点与父节点进行比较:
public int distanceBetween(Node parent, Node child) { ... }
现在我想基本上编写一个流操作,它返回具有最低值的节点,因为它与其父节点进行比较,Node
但不会在集合中.就像是:
private Node returnOpenNodeWithLowestFCost(Node parent) {
return nodeList.stream()
.min( (n1 , n2) -> ???);
.getOrElse(parent);
}
Run Code Online (Sandbox Code Playgroud)
nodeList
不包含parent
,是一个List<Node>
在包含???的区域 是我将每个N发送给其父母进行评估的地方.所以,如果打电话
distanceBetween(parent, n1) > distanceBetween(parent, n2)
,它会导致返回n1.但我无法正确配置功能.有任何想法吗?谢谢!
你可以Comparator.comparingInt
用来做比较器:
Comparator<Node> byDistFromParent = Comparator.comparingInt(n -> distanceBetween(parent, n));
Run Code Online (Sandbox Code Playgroud)
习惯使用静态导入comparingInt
,因此流表达式变为:
return nodeList.stream()
.min(comparingInt(n -> distanceBetween(parent, n));
.orElse(parent);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
77 次 |
最近记录: |