Можно ли отсортировать arraylist / hashset без использования интерфейса компаратора?

1

В основном хотелось бы сохранить объект типа Stations (строковое повторение имени станции) в алфавитном порядке из массива. Но я не могу изменить класс станций, чтобы сделать его сопоставимым, как это было предопределено для меня. Существуют ли какие-либо другие методы сортировки списка массивов станций типа в алфавитном порядке, без реализации интерфейса компаратора или с помощью collections.sort()

  • 1
    Почему существует ограничение на создание Comparator <Station> (не создание Station реализует Comparable, а определение Comparator для предоставления критериев сортировки двух станций)?
  • 0
    Вы можете использовать громоздкий подход: вручную итерировать / проверять каждое значение и сортировать список. Но вопрос в том, почему вы не хотите использовать Comparator?
Показать ещё 12 комментариев
Теги:
sorting
comparator

2 ответа

3
Лучший ответ

Поскольку исходный вопрос был основан на недоразумении, вот решение, которое использует интерфейс Comparator и Collections.sort, но не изменяет оригинальный класс Station. Во-первых, у нас есть класс Station который мы не можем изменить.

public final class Station {
  private final String name;
  public String getName() { return name; }
}

В нашем собственном коде мы можем определить новый класс:

public class StationByNameComparator implements Comparator<Station> {
  @Override
  public int compare(Station left, Station right) {
    String leftName = left.getName();
    String rightName = right.getName();
    return leftName.compareTo(rightName);
  }
}

Класс Station можно оставить как есть. Теперь мы можем использовать Collections.sort для сортировки станций:

List<Station> stations = /* ... */;
Collections.sort(stations, new StationByNameComparator());
  • 0
    Я не могу изменить класс станции для реализации сопоставимого интерфейса или интерфейса компаратора ...
  • 0
    Вам не нужно изменять класс Station . Comparator обычно реализуется в совершенно другом классе, который в вашем случае должен называться StationByNameComparator .
Показать ещё 1 комментарий
1

Как владелец места, пока ответ Артура не будет восстановлен:

Вы можете реализовать Comparator вне класса:

Collections.sort(listOfStations, new Comparator<Stations>() {
    public int compare(Stations s1, Stations s2){
      // logic here
    }
});
  • 0
    Там написано, что я не могу создать экземпляр типа Comparator <Stations>
  • 0
    @ user3603183 вы импортировали java.util.Comparator ?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню