Search code examples
javasortingjava-8comparator

Compare two objects by their field's field


I have a class named House and it has property of type Room.

class House {
   private Room room;
   // getters & setters
}

Room class has a property roomCapacity:

class Room {
   private int roomCapacity;
   // getters & setters
}

I want to sort House HashMap on the base of Room class property named roomCapacity.

Comparator<House> sortByRoomCapacity =
      Comparator.nullsFirst(Comparator.comparing(House::getRoom,
                   Comparator.nullsFirst(Comparator.naturalOrder())));

But for now I am inaccessible to get this property(getRoomCapacity) of Room class House::getRoom


Solution

  • You're almost there.

    One more nested comparing method should do the trick:

    Comparator<House> sortByRoomCapacity =
             nullsFirst(comparing(House::getRoom, 
                                  comparing(Room::getRoomCapacity, 
                                            nullsFirst(naturalOrder()))));