假设我有一个函数foo,带有一些参数。在这个函数中,我生成一个Move类型的数组m。我现在需要对这个数组进行排序。好的,所以我打破了Arrays.sort(m,Comparator(){...}。但等等,我想用来比较两个动作的函数需要考虑foo的参数,而比较器的比较函数可以只接受两个类型为Move的参数!请参阅以下代码,了解我想要做的事情。
public int compare (Move m1, Move m2, Game g, int id) {
return g.evaluate(m1, g, id) - g.evaluate(m2, g, id);
}
public int foo (Game g, int id) {
Move[] m = ... ;
???
// m is now sorted by compare(move1, move2, g, id)
}
我无法访问Game类本身,所以我不能只编辑它来解决我的问题。 Comparator类似乎无法做到这一点。有没有办法在Java中实际执行此操作?
答案 0 :(得分:6)
建立自己的比较器:
public MyComparator implements Comparator<Move>
{
private Game game;
private int id;
public MyComparator(Game g, int id)
{
this.game = g;
this.id = id;
}
// compare function, using game and I'd
}
使用它:
Move[] m = ... ;
Arrays.sort(m, new MyComparator(aGame, and));