Как насчет этого:
public class ChangeComparator implements Comparator<Quote>
{
public int compare(Quote o1, Quote o2) {
Float change1 = Float.valueOf(o1.getChange());
Float change2 = Float.valueOf(o2.getChange());
return change1.compareTo(change2);
}
}
Обратите внимание, что Java 1.4 представила Float#compare(float, float)
(и эквивалент в Double
), который может быть в значительной степени использован напрямую:
public class ChangeComparator implements Comparator<Quote>
{
public int compare(Quote o1, Quote o2) {
return Float.compare(o1.getChange(), o2.getChange());
}
}
(После редактирования я заметил, что @BorislavGizdov уже упоминал об этом в своем ответе.)
Также стоит отметить, что Java 8 Comparator#comparing(...)
иComparator#comparingDouble(...)
обеспечивает простой способ построения этих компараторов напрямую.
Comparator<Quote> changeComparator = Comparator.comparing(Quote::getChange);
Будет выполнено сравнение с использованием значений Float
в штучной упаковке.
Comparator<Quote> changeComparator = Comparator.comparingDouble(Quote::getChange);
Будет выполнено сравнение с использованием float
значений повышены до double
значений.
Учитывая, что Comparator#comparingFloat(...)
нет, я бы предпочел использовать метод comparingDouble(...)
, так как это включает только преобразование примитивных типов, а не боксирование.