Сортировка объектов в arrayylist по одному из объектов

Я так много раз встречал этот вопрос, я пробовал все их решения, и когда я отправляю их, мой код не работает из-за «Исключения нулевого указателя»

   /**
 * q5: Create a public class named "Fleet" with private instance variables "considerable" and 
 * "complicated" each of type int. You may add any other methods and variables you'd like to 
 * this class.
 * 
 * Outside of Fleet (in the Problem Set class) write a public static method named "sortFleet" 
 * that takes an ArrayList of Fleets as a parameter and returns void. This method will sort 
 * the input by the variable "complicated" in increasing order
 */
  public class Fleet {
private int considerable, complicated;

public Fleet(int beginning) {
    this.complicated = beginning;
}

public int getPrecious() {
    return this.complicated;
}
@Override 
public String toString() {
    return "" + complicated;
}
  }

public void sortFleet(ArrayList<Fleet> a) {

Collections.sort(a, new Comparator<Fleet>(){    
    @Override
    public int compare(Fleet o1, Fleet o2) {
        Long a1 = new Long(o1.getPrecious());
        Long a2 = new Long(o2.getPrecious());
        //return a1.compareTo(a2);  
        return Long.compare(a1,a2);

    }

}); 
 }

Код работает, и я сделал так много разных способов, и он работает. но когда я отправляю, он говорит то же самое. каждый раз. Пожалуйста помоги

Что с коробочными Long? Почему бы тебе просто не вернуть Integer.compare(o1.getPrecious(), o2.getPrecious())? Или сделайте a.sort(Comparator.comparingInt(Fleet::getPrecious));.

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

Ответы 1

Чтобы отсортировать Fleet по Complicated, вы должны заставить Object реализовать интерфейс Comparable и переопределить метод compareTo (), как показано ниже.

Класс флота:

public class Fleet implements java.lang.Comparable<Fleet>{

    private int considerable, complicated;

    public Fleet() {
        super();
    }

    public Fleet(int considerable, int complicated) {
        super();
        this.considerable = considerable;
        this.complicated = complicated;
    }

    public int getConsiderable() {
        return considerable;
    }

    public void setConsiderable(int considerable) {
        this.considerable = considerable;
    }

    public int getComplicated() {
        return complicated;
    }

    public void setComplicated(int complicated) {
        this.complicated = complicated;
    }

    @Override
    public int compareTo(Fleet fleet) {
        int compareComplicated = ((Fleet)fleet).getComplicated();
        return this.complicated - compareComplicated;
    }

    @Override
    public String toString() {
        return "Fleet [considerable = " + considerable + ", complicated = " + complicated + "]";
    }


}

Теперь мы можем вызвать Collections.sort в ArrayList:

Основной класс:

import java.util.ArrayList;
import java.util.Collections;

public class SortFleet {

    public static void main(String[] args) {
        ArrayList<Fleet> arrayFleet = new ArrayList<Fleet>();
        Fleet fleetA = new Fleet(1, 2);
        Fleet fleetB = new Fleet(4, 12);
        Fleet fleetC = new Fleet(3, 5);
        Fleet fleetD = new Fleet(3, 50);
        Fleet fleetE = new Fleet(2, 3);
        Fleet fleetF = new Fleet(2, 50);


        arrayFleet.add(fleetA);
        arrayFleet.add(fleetB);
        arrayFleet.add(fleetC);
        arrayFleet.add(fleetD);
        arrayFleet.add(fleetE);
        arrayFleet.add(fleetF);


        System.out.println("Before sort:");

        for ( Fleet f : arrayFleet)
        {
            System.out.println(f);
        }

        System.out.println();

        sortFleet(arrayFleet);

        System.out.println("After sort:");
        for ( Fleet f : arrayFleet)
        {
            System.out.println(f);
        }
    }

    public static void sortFleet(ArrayList<Fleet> arrayFleet) {
        Collections.sort(arrayFleet);
    }

}

Консольный вывод:

Before sort:
Fleet [considerable=1, complicated=2]
Fleet [considerable=4, complicated=12]
Fleet [considerable=3, complicated=5]
Fleet [considerable=3, complicated=50]
Fleet [considerable=2, complicated=3]
Fleet [considerable=2, complicated=50]

After sort:
Fleet [considerable=1, complicated=2]
Fleet [considerable=2, complicated=3]
Fleet [considerable=3, complicated=5]
Fleet [considerable=4, complicated=12]
Fleet [considerable=3, complicated=50]
Fleet [considerable=2, complicated=50]

Обновлено: ПОДХОД JAVA 8:

Удаление интерфейса Comparable и переопределения в классе Fleet можно просто отсортировать так, возвращая тот же ожидаемый результат:

public static void sortFleet(ArrayList<Fleet> arrayFleet) {
        Collections.sort(arrayFleet, Comparator.comparingInt(Fleet::getComplicated));
}

Пожалуйста, отметьте его как оставленный, если он решил вашу проблему @wallischpls

Rcordoval 02.05.2018 03:25

@wallischpls Также возьмите тур. «Это не дискуссионный форум. Здесь нет болтовни». Не нужно «спасибо» или «пожалуйста, помогите».

user202729 02.05.2018 04:24

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