2014-10-29 3 views
1

Скажем, у меня есть функция foo с некоторыми параметрами. В этой функции я генерирую массив m типа Move. Теперь мне нужно отсортировать этот массив. Итак, я вырываю Arrays.sort (m, Comparator() {...}. Но подождите, функция, которую я хочу использовать для сравнения двух ходов, должна учитывать параметры foo, но функция сравнения Comparator может только два аргумента типа Move! Смотрите следующий код для того, что я хочу сделать.Java: сортировка массива с использованием внешних параметров

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) 
} 

у меня нет доступа к самой игре класса, поэтому я не могу просто изменить, что решить мою проблему. . класс Компаратор кажется не в состоянии сделать это есть ли способ действительно сделать это в Java

+0

Вы можете создать обертку вокруг игры, а затем отсортировать ее с помощью компаратора. – StackFlowed

+2

Создайте класс MoveComparator, который создается с использованием 'Game' и' int', и сохраняет их как переменные экземпляра. MoveComparator может затем сравнить два 'Move', который он передал, используя 'Game' и' int', которые он уже имеет. –

+0

Вы можете подклассифицировать компаратор и предоставить вам свои параметры, а не использовать анонимный компаратор. Затем в вашей реализации, которая выполняет сравнения, вы можете использовать эти значения. – mkobit

ответ

4

Создайте свой собственный компаратор:

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)); 
+0

Это сработало, спасибо! – frostedsky

Смежные вопросы