簡體   English   中英

我如何在 java 中按包裝盒數的降序對這個自定義數組列表進行排序

[英]how do i sort this custom arraylist in java , in descending order of the number of boxes packed

這是我為 Crackerpacker 的第一個類,我為 arraylist 創建了另一個類,然后將所有這些餅干包裝器添加到該 arraylist 中,現在我想按照 CrackerPackers 包裝的盒子數量的降序對 arraylist 進行排序

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;

這是第二個類,我在其中創建了一個 arraylist 來添加所有的 Crackerpacker 對象在這個 arraylist 中,我想按 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 方法,但我不知道如何實現它

下面將傳入的CrackerPackernumberOfBoxes與當前對象的numberOfBoxes進行比較。 這將具有按降序對其進行排序的效果。

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

從javadoc,

將此對象與指定的對象進行比較以進行排序。 當此對象小於、等於或大於指定對象時,返回一個負整數、零或正整數。

因此,當比較兩個 CrackerPacker 對象時,我們正在反轉 Integer 比較檢查以實現降序。

示例:比較 5 和 10,我們將 10 與 5 進行比較,因此Integer.compare返回 1(因為 10 > 5)。 但是從外界的比較,我們指出,第一對象比第二,因此它將在第二(..10 .... 5 ...)后出現。 這將按降序對列表進行排序。

以下表達式將有所幫助

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM