Как отсортировать ArrayList, используя ключ Map в качестве объекта списка и значение в порядке? - PullRequest
0 голосов
/ 14 апреля 2020

Мне нужно сохранить порядок моего списка объектов, так как он может быть изменен и переупорядочен в любое время в моем веб-приложении.

В моей модели у меня есть список объектов массива, пример

objectList = [object1, object2, object3, object4]

и я сохраняю порядок каждого объекта, принадлежащего этому экземпляру, в примере карты: order

{
   "object1":4,
   "object2":2,
   "object3":1,
   "object4":3
}

Поэтому я хочу отсортировать свой массив по его значению на карте, полученной объектами Id в качестве ключ:

Ожидаемый результат:

[object3, object2, object4, object1]

Как мне go сделать это?

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Если у ваших объектов есть геттер для идентификатора getId(), то вы можете использовать вспомогательный метод Comparator.comparing(), который создает компаратор для предоставленной лямбды:

objectList.sort(Comparator.comparing(o -> yourMap.get(o.getId()));

Это фактически то же самое, что написать собственный Comparator или написать собственный метод сравнения.

0 голосов
/ 14 апреля 2020

То, что может показаться излишним, но было бы более естественно определить новый класс

class IndexedElement implments Comparable<Integer> {
    private final int index;
    private final YourObject element;

    public IndexedElement(int index, YourObject element) {
       this.index = index;
       this.element = element;
    }

    @Override
    public int compareTo(Integer o) {
       return this.getIndex().compareTo(o.getIndex()) ;
    }
}

, хранящий подобные объекты в TreeSet<IndexedElement>, вы можете автоматически выполнять сортировку и извлечение (TreeSet.ceiling ( новый IndexedElement (yourIndex, null)), просто не забудьте переопределить equals / hashCode в IndexedElement)

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