Некоторые дополнительные очки:
1) Нет необходимости преобразовывать мощность в String
, чтобы сравнить ее. Вы можете сделать целочисленное сравнение:
int result = this.power - o.power;
if (result == 0) {
result = this.model.compareTo(o.model);
}
Обратите внимание, что в этом случае порядок сортировки будет отличаться от сравнения на основе строк , хотя (например, "200"> "10000", тогда как 200 <10000). </p>
2) Вы можете дополнительно оптимизировать свой метод compareTo
, проверив, сравнивается ли объект с самим собой:
public int compareTo(Product that) {
int ret;
if (this == that) { // Object is being compared against itself.
ret = 0;
} else {
// Do full comparison.
}
return ret;
}
3) От компаратора Javadoc:
При использовании следует соблюдать осторожность
компаратор, способный навязать
порядок несовместим с равно
заказать отсортированный набор (или отсортированную карту).
Ваш метод сравнения основан только на мощности и модели, тогда как равенство будет основываться на идентичности объекта, если вы не переопределите метод equals
. Следовательно, вы можете рассмотреть возможность переопределения equals
(и hashCode
), чтобы привести их в соответствие с compareTo
.