CompareTo Method

Я, наконец, думаю, что нашел способ отсортировать свои транзакции по сумме с помощью оператора 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;
}

Зачем вы кастуете Tra на Student_Transaction. Он уже передан как Student_Transaction.

MWB 17.12.2018 19:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
88
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я предлагаю вам пойти с:

return Double.compare(this.amount, tra.getAmount());

Это означает, что вы можете избежать выполнения всех этих условий if / else if.

Конечно, если либо this.amount, либо tra.getAmount() вернут нулевое значение Double, распаковка в двойное значение вызовет NPE.

Roddy of the Frozen Peas 17.12.2018 19:11

@RoddyoftheFrozenPeas, где говорится, что amount допускает значение NULL? как вы думаете, подход OP не вызовет исключения в таком случае? оставим эти предположения ОП.

Ousmane D. 17.12.2018 19:17

Спасибо всем за ваши ответы, я выберу Float.Compare, потому что моя переменная сумма - это тип данных с плавающей запятой.

user9043248 17.12.2018 19:30

return Double.compare (this.amount, tra.getAmount ()); Поэтому в заключение AOMINE, эта строка кода сравнивает текущий объект с сохраненным и затем переупорядочивает в правильном порядке! Следовательно, я все еще могу использовать очередь для хранения своих транзакций, но с помощью интерфейса сравнения для сортировки.

user9043248 17.12.2018 19:32

@Aomine Поскольку OP не позаботился о публикации фактического объявленного типа данных в вопросе, я подумал, что было бы разумно указать, что если бы переменная имела тип Double (или эквивалентную числовую оболочку), которая потенциально могла бы иметь значение NULL, это привело бы к возможный NPE. Будущие читатели также могут не знать об этой возможности.

Roddy of the Frozen Peas 17.12.2018 19:46

Интересно и может представлять возможные риски, но если это произойдет, я знаю, где искать при диагностике проблемы :) Всем спасибо.

user9043248 17.12.2018 19:49

Это метод compareTo для Student_Stransaction, поэтому нет необходимости использовать геттеры:

@Override
public int compareTo(Student_Transaction Tra) {
    return Tra != null ? Float.compare(amount, Tra.amount)) : 1;
}

Значит, объект null будет больше, чем объект неnull?

forpas 17.12.2018 20:17

Я буквально понял, что то, что я сделал в приведенном выше потоке, было ответом на мой вопрос, он четко определил, как я буду сортировать свои суммы в каждом объекте транзакции, финальная часть этого этапа заключалась в использовании метода 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()
    }
}

Мне не нужно было прилагать лишних усилий, я просто неправильно понял свое программирование, и я очень признателен за то, что это сообщество профессиональных программистов посвящает свое время помощи таким людям, как я :)

Другие вопросы по теме