Я, наконец, думаю, что нашел способ отсортировать свои транзакции по сумме с помощью оператора if, но мне нужен способ указать, когда одна транзакция меньше или больше другой, они меняются местами.
У меня есть образец того, что я сделал до сих пор, и я не слишком уверен, что мне здесь не хватает.
@Override
public int compareTo(Student_Transaction Tra)
{
if (getAmount() == ((Student_Transaction) Tra).getAmount()) {
return Amount - Tra.getAmount();
}
else if (getAmount() > ((Student_Transaction) Tra).getAmount()) {
return 1;
}
else if (getAmount() < ((Student_Transaction) Tra).getAmount()) {
return -1;
}
return Amount;
}
Я предлагаю вам пойти с:
return Double.compare(this.amount, tra.getAmount());
Это означает, что вы можете избежать выполнения всех этих условий if
/ else if
.
Конечно, если либо this.amount
, либо tra.getAmount()
вернут нулевое значение Double, распаковка в двойное значение вызовет NPE.
@RoddyoftheFrozenPeas, где говорится, что amount
допускает значение NULL? как вы думаете, подход OP не вызовет исключения в таком случае? оставим эти предположения ОП.
Спасибо всем за ваши ответы, я выберу Float.Compare, потому что моя переменная сумма - это тип данных с плавающей запятой.
return Double.compare (this.amount, tra.getAmount ()); Поэтому в заключение AOMINE, эта строка кода сравнивает текущий объект с сохраненным и затем переупорядочивает в правильном порядке! Следовательно, я все еще могу использовать очередь для хранения своих транзакций, но с помощью интерфейса сравнения для сортировки.
@Aomine Поскольку OP не позаботился о публикации фактического объявленного типа данных в вопросе, я подумал, что было бы разумно указать, что если бы переменная имела тип Double
(или эквивалентную числовую оболочку), которая потенциально могла бы иметь значение NULL, это привело бы к возможный NPE. Будущие читатели также могут не знать об этой возможности.
Интересно и может представлять возможные риски, но если это произойдет, я знаю, где искать при диагностике проблемы :) Всем спасибо.
Это метод compareTo
для Student_Stransaction
, поэтому нет необходимости использовать геттеры:
@Override
public int compareTo(Student_Transaction Tra) {
return Tra != null ? Float.compare(amount, Tra.amount)) : 1;
}
Значит, объект null
будет больше, чем объект неnull
?
Я буквально понял, что то, что я сделал в приведенном выше потоке, было ответом на мой вопрос, он четко определил, как я буду сортировать свои суммы в каждом объекте транзакции, финальная часть этого этапа заключалась в использовании метода collection.sort и в одном из последние темы я опубликовал ответ на то, как это делается ...
@Override
public int compareTo(Student_Transaction Tra){
if (Tra.getAmount() < getAmount()) {
return -1;
}
else if (Tra.getAmount() == getAmount()) {
return 0;
}
else {
return 1; // Tra.getAmount() > getAmount()
}
}
Мне не нужно было прилагать лишних усилий, я просто неправильно понял свое программирование, и я очень признателен за то, что это сообщество профессиональных программистов посвящает свое время помощи таким людям, как я :)
Зачем вы кастуете
Tra
наStudent_Transaction
. Он уже передан какStudent_Transaction
.