Сортировка карты по атрибуту объекта - PullRequest
0 голосов
/ 21 мая 2018

Отказ от ответственности: я уже однажды опубликовал такой вопрос, и он был отмечен как дубликат.Пожалуйста, попробуйте и помогите мне.Я прошел через все предыдущие методы на stackoverflow, и ни один не помог.Все методы, упомянутые для сортировки Map (Key, Values), не работали в моем случае, так как у меня есть еще один шаг, т.е. получение атрибута значения.На этот раз я попытался описать все детали.

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

Например, предположим, у меня есть класс

class Entry
{
    int id;
    String name;
    String address;
    //Rest of the code
}

Теперь я создал карту

 Map<String,Entry>

Я хочу отсортировать карту по идентификатору атрибута класса Entry (Entry.id)

Пожалуйста, помогите!

Например, у меня есть три объекта класса Entry

entry1 :
        id=1
        name="abc"
        address="india"
entry2 :
        id=2
        name="xyz"
        address="india"
entry3 :
        id=3
        name="pqr"
        address="india"

Теперь у меня изначально есть карта следующим образом:

Key :   Value
first:  entry2
second: entry3
third : entry1

После сортировки должно быть как

Key :   Value
third : entry1
first:  entry2
second: entry3

Ответы [ 3 ]

0 голосов
/ 21 мая 2018

Ваше требование обычно является признаком неправильного использования структуры данных.

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

Попробуйте понять ответы на этот вопрос: Сортировать картупо значениям .А затем попробуйте использовать пользовательский компаратор в комбинации.

0 голосов
/ 21 мая 2018

Невозможно отсортировать карту.

У вас может быть карта, в которой сортируются записи, или вы можете отсортировать List<Map.Entry>.

Попробуйте это:

Map<String, Entry> map; // your map
Map<String, Entry> sorted = new TreeMap<>(Comparator.comparing(s -> map.get(s).getId());
sorted.putAll(map);
0 голосов
/ 21 мая 2018

Вы можете легко выполнить задачу с помощью потокового API:

Map<String, Entry> resultSet = myMap.entrySet()
                .stream()
                .sorted(Comparator.comparingInt(e -> e.getValue().getId()))
                .collect(Collectors.toMap(Map.Entry::getKey,
                        Map.Entry::getValue,
                        (left, right) -> left,
                        LinkedHashMap::new));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...