Сортировка картыиспользуя Java 8 - PullRequest
0 голосов
/ 09 февраля 2019

Как мне отсортировать карту, используя данные из значения Пример: Map<String, List<someObject>> - мой ввод.Мне нужно отсортировать и получить заказ в someObject.getVar2()

Пример:

class SomeObject{
    String var1;
    String var2;
    String var3;
    // getters and setters
}

ВХОД :

Вступление1:

{
Key1 = 123
[
someObject
[
var1=4
var2=5
var3=6
]
]
}

Запись 2:

{
Key1 = 456
[
someObject
[
var1=2
var2=8
var3=1
]
]
}

Запись 3:

{
Key1 = 789
[
someObject
[
var1=1
var2=2
var3=3
]
]
}

ВЫХОД после сортировки по var2:

Запись 1:

{
Key1 = 789
[
someObject
[
var1=1
var2=2
var3=3
]
]
}

Запись 2:

{
Key1 = 123
[
someObject
[
var1=4
var2=5
var3=6
]
]
}

Запись 3:

{
Key1 = 456
[
someObject
[
var1=2
var2=8
var3=1
]
]
}

На карте 3 записи в формате Map<String, List<someObject>> Мне нужно отсортировать этоКоллекция карт со значениями var2

До ввода ключей: 123,456,789

После сортировки ключей: 789,123,456

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Ваш ввод не совсем соответствует структуре данных, которую вы использовали, т.е. Map<String, List<SomeObject>>.Так как в значениях никогда не бывает List (и, если таковые имеются, логику для сортировки придется переопределить.) Следовательно, вы можете просто представить свой текущий ввод как Map<String, SomeObject>:

Map<String, SomeObject> input = new HashMap<>(); // initialised with your sample

, а затем сортируйте его следующим образом:

Map<String, SomeObject> output = map.entrySet()
    .stream()
    .sorted(Comparator.comparing(o -> o.getValue().getVar2())) // **
    .collect(Collectors
        .toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> a, LinkedHashMap::new));

** отметьте, что представление Number с (в основном Integer с здесь), а затем сортировка по ним, вероятно, не следует желать.

0 голосов
/ 09 февраля 2019

То, что вы хотите, не возможно.Просмотр документации интерфейса Map показывает, что

[...] Некоторые реализации карт, такие как класс TreeMap, дают конкретные гарантии относительно их порядка.;другие, как класс HashMap, этого не делают.[...]

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