Как отсортировать 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));
→ Ссылка