2013-10-13 4 views
0

У меня есть много разных классов оружия и классов вражеских/игровых. Все они имеют общую переменную y, которую они обновляют. Как я могу отсортировать их в соответствии с этим значением y? Они все (надеюсь) будут в списке массивов. Чтение где-то я увидел, что вы можете добавить параметр в Collections.sort(), но я не мог понять, как это сделать со многими классами.Сортировка различных объектов по общему значению

Кроме того, есть ли эквивалент java для динамических списков в C#?

+1

У вас есть классы, реализующие интерфейс 'Comparable'. – Meesh

+0

Как это работает/ – Chris

+0

http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html – Daniel

ответ

2

Если все классы враг/игрок имеет один из родителей (класс или интерфейс), который это звучит, как они делают, если вы делаете список из них, вы можете использовать Collections.sort(List, Comparator) и поместите какой-то метод getY в родительский класс/интерфейс, который может использовать ваш Comparator.

+0

К сожалению, у них есть не все аналогичный класс, они были скопированы, чтобы сформировать друг друга. Я написал эту часть, прежде чем узнал об этом. – Chris

+0

Самое быстрое исправление звучит так, как будто вы должны сделать интерфейс и заставить его все реализовать его. Добавьте getY в интерфейс, а затем все классы должны будут его реализовать. – TofuBeer

+0

Это правда, спасибо за помощь – Chris

2

Вы можете использовать компаратор, который использует значение y в качестве значения сортировки. Если вы не хотите публиковать общедоступный метод, возвращающий значение y, вы можете написать package-private Класс компаратора и использовать метод Collections.sort(list, MyComparator).

например:

class MyComparator implements Comparator<Player> { 

    @Override public int compare(Player p1, Player p2) { 
     return Float.compare(p1.y, p2.y); 
    } 
} 
Смежные вопросы