Как отсортировать map по объекту object
Подскажите как сортируется map с выводом на экран, состоящая из Long и Pet? Перед выводом на экран необходима сортировка по трём полям одновременно внутри Pet: person name -> pet name -> pet weight.
Сам класс Pet состоит из полей характеристик и объекта Person:
Pet(String name, double weight, Type type, Person persons);
public void displayPet() {
for (Map.Entry<Long, Pet> item : mapPet.entrySet()) {
System.out.println("ID: " + item.getKey() + ", name: " + item.getValue());
}
}
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
Ну, например, так(только перменную weight сделайте ссылочной либо перепишите последнюю строку в фильтре):
Map<Long, Pet> result = mapPet.entrySet().stream()
.sorted((e1, e2) -> {
int personName = e1.getValue().getPerson().getName().compareTo(e2.getValue().getPerson().getName());
if (personName!=0) return personName;
int petName = e1.getValue().getName().compareTo(e2.getValue().getName());
if (petName!=0) return petName;
return e1.getValue().getWeight().compareTo(e2.getValue().getWeight());
})
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (o1,o2) -> o1, LinkedHashMap::new));