Atom Feed SITE FEED   ADD TO GOOGLE READER

Coding in the small with Google Collections: Comparators.max

Part 3 in a Series.

Comparators.max takes two Comparables and returns the larger of the two. It improves upon the standard approach, which requires both a comparison and a ternary:

Before:


public Money calculateDeliveryCharge(Order order) {
double distanceInKm = Geography.getDistance(
storeAddress, order.getAddress());
Money perKm = pricePerKm.times(distanceInKm);

return perKm.compareTo(minimumDeliveryCharge) > 0
? perKm
: minimumDeliveryCharge;

}


After:


  public Money calculateDeliveryCharge(Order order) {
double distanceInKm = Geography.getDistance(
storeAddress, order.getAddress());
Money perKm = pricePerKm.times(distanceInKm);

return Comparators.max(perKm, minimumDeliveryCharge);
}


Of course the Comparators.min method is also included. As a special treat, there's overloaded versions of each that allow you to specify your own comparator, such as String.CASE_INSENSITIVE_ORDER.

Part 4
There is a small error in your post. You used the class name "Comparables" instead of the correct class name "Comparators".
Thanks! Fixed.
sweet!!!
There're some "Comparables" yet.
Fixed; how embarrassing.

In other news, the 'new' new way to do this with Google Collections is even simpler with the Ordering base class. It lets you do stuff like this:
Date payday = ...
Date weekend = ...
Date party = Comparators.naturalOrder().min(payday, vacation);