[英]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 方法,但我不知道如何實現它
下面將傳入的CrackerPacker
的numberOfBoxes
與當前對象的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.