我有以下课程:
public abstract class Map {
protected PriorityQueue<Node> openNodes;
}
我的实现目前的工作方式如下:
public Map() {
PriorityQueue<Node> openNodes = new PriorityQueue<Node>((Node node1, Node node2) -> Integer.compare(node1.getFinalCost(), node2.getFinalCost()));
}
但是,我也希望使用这样的实现:
public Map() {
PriorityQueue<Node> openNodes = new PriorityQueue<Node>((Node node1, Node node2) -> Integer.compare(node1.getHeuristicCost(), node2.getHeuristicCost()));
}
有没有办法将节点类的heuristiccost或finalcost字段传递给构造函数来实现这些不同的行为?像这样:
public Map(*fieldName*) {
PriorityQueue<Node> openNodes = new PriorityQueue<Node>((Node node1, Node node2) -> Integer.compare(node1.get*fieldName*(), node2.get*fieldName*()));
}
如果没有,你能提出一个解决方案来实现这一点吗?
1条答案
按热度按时间x33g5p2x1#
可以使用从方法引用创建比较器
Comparator.comparingInt
:那你就可以写了
new Map(Node::getFinalCost)
或者new Map(Node::getHeuristicCost)
.