сравнивать и сортировать различные типы объектов, используя java Collections - PullRequest
5 голосов
/ 02 октября 2010

Как сравнивать и сортировать различные типы объектов, используя java Collections. Ниже приведен пример использования: Например, СОБАКА, ЧЕЛОВЕК, ДЕРЕВО, КОМПЬЮТЕР, МАШИНА - все эти разные объекты имеют общее свойство, называемое «int lifeTime». Теперь я хочу заказать эти объекты на основе свойства lifeTime

Thx

Ответы [ 3 ]

9 голосов
/ 02 октября 2010

Все эти объекты должны иметь общий абстрактный класс / интерфейс, такой как Alive с методом getLifeTime(), и вы можете либо Alive extends Comparable<Alive>, либо создать свой собственный Comparator<Alive>.

public abstract class Alive extends Comparable<Alive>{
    public abstract int getLifeTime();
    public int compareTo(Alive alive){
        return 0; // Or a negative number or a positive one based on the getLifeTime() method
    }
}

Или

public interface Alive {
    int getLifeTime();
}

public class AliveComparator implements Comparator<Alive>{
    public int compare(Alive alive1, Alive alive2){
        return 0; // Or a negative number or a positive one based on the getLifeTime() method
    }
}

После этого следующим шагом будет использование автоматически отсортированной коллекции (TreeSet<Alive>) или сортировка List<Alive> с помощью Collections.sort().

* 1016.*

Ресурсы:

1 голос
/ 02 октября 2010

Если все ваши классы реализуют интерфейс Living, определенный следующим образом (всегда хорошая идея в Java):

public interface Living {
    int getLifeTime();
}

вы можете сортировать свои коллекции живых объектов, используя библиотеку lambdaj следующим образом:

List<Alive> sortedLivings = sort(livings, on(Alive.class).getLifeTime());
1 голос
/ 02 октября 2010

Самый простой способ - задействовать все классы, реализующие интерфейс или расширяющие базовый класс, который предоставляет общий атрибут (lifeTime), используемый для сравнения.В противном случае вы можете просто создать Comparator, который использует отражение, чтобы получить атрибут lifeTime, и использовать это значение в методе сравнения для вашего компаратора.Конечно, это вызовет исключения, если ваша коллекция когда-либо будет содержать объект, не имеющий атрибута lifeTime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...