在Stream之外的对象确定的流上返回min

Nat*_*H06 3 java min comparator java-8 java-stream

我正在寻找一个Comparator写信给里面放一个minstream上一集,让我们只说这是一个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.但我无法正确配置功能.有任何想法吗?谢谢!

Mis*_*sha 5

你可以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)