пятница, 15 мая 2009 г.

Java: быстрый минимум среди объектов

Вы пишете на Java и вам нужно "быстро" найти "минимальный" объект с учётом того, что они могут быть NULL?

Вот, как мне кажется, вполне изящное решение для Java 1.4:
Timestamp minDate = 
(Timestamp) Collections.min(
Arrays.asList(new Object[]{date1, date2, date3}),
new Comparator() {
public int compare(Object o1, Object o2) {
if(o1 == null)
return 1;
else
if(o2 == null)
return -1;
else
return ((Timestamp)o1).compareTo(o2);
}});

Единственное неудобство в том, что compareTo() не может принимать в качестве параметра NULL вместо объекта, иначе бы можно было убрать второй if.
Кстати, это отличный пример замыкания с помощью анонимного класса.

UPD: немного побамил код :)
Timestamp minDate = 
(Timestamp) Collections.min(
Arrays.asList(new Object[]{date1, date2, date3}),
new Comparator() {
public int compare(Object o1, Object o2) {
return o1 == null ? 1 : o2 == null ? -1 : ((Timestamp)o1).compareTo(o2);
}});

2 комментария: