Скажем, у меня есть функция 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
Вы можете создать обертку вокруг игры, а затем отсортировать ее с помощью компаратора. – StackFlowed
Создайте класс MoveComparator, который создается с использованием 'Game' и' int', и сохраняет их как переменные экземпляра. MoveComparator может затем сравнить два 'Move', который он передал, используя 'Game' и' int', которые он уже имеет. –
Вы можете подклассифицировать компаратор и предоставить вам свои параметры, а не использовать анонимный компаратор. Затем в вашей реализации, которая выполняет сравнения, вы можете использовать эти значения. – mkobit