The generated comparator can use several nested fields, which may have a common parent. Ideally, we would like to re-reference these common parts to enhance readability.
Consider the following comparator:
java.util.Comparator.comparing((Traveler traveler) -> traveler.getResidence().getRegion())
.thenComparing((Traveler traveler) -> traveler.getResidence().getAddress().getIsActual())
.thenComparing((Traveler traveler) -> traveler.getResidence().getAddress().getCity())
.thenComparing((Traveler traveler) -> traveler.getResidence().getName().getStructure())
.thenComparing((Traveler traveler) -> traveler.getResidence().getName());
The following parts are used several times:
traveler.getResidence().getAddress() - two invocations.
traveler.getResidence().getName() - two invocations.
traveler.getResidence() - four invocations.