Сортировка набора объектов в Java, где класс реализации является окончательным

Я использую общедоступный API, предоставленный третьей стороной, и у меня есть коллекция объектов, которые определены как окончательные.

У объекта есть метод getName(), который позволяет мне получить строковое имя объекта.

Что мне нужно сделать, так это отсортировать объекты по имени, и изначально я пытался расширить исходный класс для реализации Comparable. Но именно тогда я узнал, что это окончательно и, следовательно, невозможно.

Извиняюсь за терминологию здесь... новичок в Java и все еще ищу свой путь. Пожалуйста, не могли бы вы помочь, предоставив мне альтернативные методы?

Спасибо,


person user3123546    schedule 20.12.2013    source источник


Ответы (2)


Вы можете реализовать свой собственный Comparator без расширения класса и использовать его в качестве параметра для Collections.sort:

public class MyComparator implements Comparator<MyClass> {
    @Override
    int compate (MyClass a, MyClass b) {
        // null handling removed for clarity's sake
        // add it if you need it
        return a.getName().compareTo(b.getName());
    }
}

А теперь просто используйте его:

List<MyClass> myList = ...;
Collections.sort (myList, new MyComparator());
person Mureinik    schedule 20.12.2013
comment
Спасибо - это сработало, как только я понял, что базовые коллекции не являются упорядоченными списками и не могут быть отсортированы. - person user3123546; 15.01.2014

Вам нужно будет реализовать свой собственный компаратор и использовать Collections.sort для своей коллекции. Что-то вроде этого:

class CustomComparator implements Comparator<YourObject> {

    @Override
    public int compare(YourObject o1, YourObject o2) {
      return o1.getName().compareTo(o2.getName());
    }
}

Затем используйте компаратор как

Collections.sort(yourCollection,new CustomComparator());

Надеюсь, поможет.

person Jiri Kusa    schedule 20.12.2013