как мне отсортировать этот пользовательский массив в java в порядке убывания количества упакованных коробок

это мой первый класс для Crackerpacker, я создал еще один класс для arraylist, а затем добавил все эти упаковщики взломщиков в этот arraylist, теперь я хочу отсортировать arraylist в порядке убывания количества коробок, упакованных CrackerPackers

public class CrackerPacker {
      private   String name;
      private int numberOfBoxes;

      public CrackerPacker (String name, int numberOfBoxes){
           this.name = name;
           this.numberOfBoxes = numberOfBoxes;
      }

        public int getNumberOfBoxes() {
            return numberOfBoxes;
        }

        public void setNumberOfBoxes(int numberOfBoxes) {
            this.numberOfBoxes = numberOfBoxes;
        }

        public String getName() {
            return name;
        enter code here
        }
        @Override
        public String toString() {
            return "CrackerPacker{" +
                    "name='" + name + '\'' +
                    ", numberOfBoxes=" + numberOfBoxes +
                    '}';
        }
        public double getwage() {
          if ( numberOfBoxes < 51 ) {
              return numberOfBoxes * 1.15;
          }
          else {
              double wage = (57.5 + ((numberOfBoxes - 50) * 1.25));
              return wage;

Это второй класс, в котором я создал массив, чтобы добавить в него все объекты взломщика. Этот массив, который я хочу отсортировать в порядке убывания количества коробок, упакованных CrackerPackers

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

public class Common {
    public static ArrayList<CrackerPacker> lectures = new ArrayList<>();

    int sum = 0;
    int boxes = 0;

    public int totalWage() {
        for (int i = 0; i < lectures.size(); i++) {
            sum += lectures.get(i).getwage();
        }
        return sum;
    }
    public int totalBoxes() {
        for (int i = 0; i < lectures.size(); i++){
            boxes += lectures.get(i).getNumberOfBoxes();

        }
    return boxes;

Это мой основной метод, я хочу отсортировать список массивов по убыванию числа коробок, упакованных объектами, пожалуйста, покажите мне, как это сделать

  import java.util.Collections;

  public class Main {

    public static void main(String[] args) {
        CrackerPacker steve = new CrackerPacker("STEVE", 127);
        CrackerPacker gary = new CrackerPacker("Gary", 103);
        CrackerPacker tony = new CrackerPacker("tony", 473);
        CrackerPacker saad = new CrackerPacker("Saad", 129);
        CrackerPacker rubiya = new CrackerPacker("rubiya", 117);

        Common common = new Common();

        Common.lectures.add(steve);
        Common.lectures.add(gary);
        Common.lectures.add(tony);
        Common.lectures.add(saad);
        Common.lectures.add(rubiya);


        for ( CrackerPacker element : Common.lectures) {
            System.out.println(element);
        }
        System.out.println(common.totalWage());
        System.out.println(common.totalBoxes());

я думаю, что использовал метод compareto, но я не знаю, как его реализовать


person Anzer Khan    schedule 15.12.2019    source источник


Ответы (2)


Ниже сравниваются numberOfBoxes переданных CrackerPacker с текущими объектами. Это приведет к сортировке по убыванию.

public class CrackerPacker implements Comparable<CrackerPacker> {
    @Override
    public int compareTo(CrackerPacker c) {
        return Integer.compare(c.numberOfBoxes, this.numberOfBoxes);
    }
}

Из javadoc,

Сравнивает этот объект с указанным объектом для порядка. Возвращает отрицательное целое число, ноль или положительное целое число, поскольку этот объект меньше, равен или больше указанного объекта.

Следовательно, при сравнении двух объектов CrackerPacker мы обращаем проверку сравнения целых чисел для достижения убывающего порядка.

Пример: сравнивая 5 и 10, мы сравниваем 10 с 5, поэтому Integer.compare возвращает 1 (поскольку 10 > 5). Но из внешнего сравнения мы утверждаем, что первый объект больше второго и, следовательно, он появится после второго (..10....5...). Это сортирует список в порядке убывания.

person user7    schedule 15.12.2019

Следующее выражение поможет

Collections.sort(Common.lectures, (Comparator< CrackerPacker >) (o1, o2) -> Integer.compare(o1.getNumberOfBoxes(), o2.getNumberOfBoxes()));
person papaya    schedule 15.12.2019