Java 作为ArrayList的子级进行排序
我的教授让我对一个软饮料列表类进行排序,该类扩展到软饮料的数组列表,按升序和降序排列,但我似乎无法让它起作用Java 作为ArrayList的子级进行排序,java,sorting,inheritance,arraylist,collections,Java,Sorting,Inheritance,Arraylist,Collections,我的教授让我对一个软饮料列表类进行排序,该类扩展到软饮料的数组列表,按升序和降序排列,但我似乎无法让它起作用 private void sort(boolean isAscending){ if (isAscending){ Collections.sort(super(),Collections.reverseOrder((a,b) -> { return a.getPrice().compareTo(b.getPrice()); }));
private void sort(boolean isAscending){
if (isAscending){
Collections.sort(super(),Collections.reverseOrder((a,b) -> {
return a.getPrice().compareTo(b.getPrice());
}));
}
}
我对Java还很陌生,所以我不太了解它的内部工作原理,如果有任何帮助,我将不胜感激。
PS:有没有办法从当前列表创建一个临时排序的ArrayList?因为我只需要按排序的顺序打印,所以我并不想对实际数组进行排序。谢谢您可以修改函数以返回原始列表的排序副本。假设您正在使用一个名为
软饮料的类,您可以执行以下操作:
private ArrayList<SoftDrink> sort(boolean isAscending){
ArrayList<SoftDrink> copy = new ArrayList<>(originalList); // creates a copy of your original list
Comparator<SoftDrink> ascendingComparator = new Comparator<SoftDrink>() {
@Override
public int compare(SoftDrink a, SoftDrink b) {
return a.getPrice() - b.getPrice();
}
};
if (isAscending) {
copy.sort(ascendingComparator);
} else {
copy.sort(Collections.reverseOrder(ascendingComparator));
}
return copy;
}
私有数组列表排序(布尔isAscending){
ArrayList copy=新建ArrayList(originalList);//创建原始列表的副本
比较器递增比较器=新比较器(){
@凌驾
公共int比较(软饮料a、软饮料b){
返回a.getPrice()-b.getPrice();
}
};
如果(正在搜索){
复制.排序(升序比较器);
}否则{
copy.sort(Collections.reverseOrder(ascendingComparator));
}
返回副本;
}
您不能让它工作是什么意思?有什么问题吗?当我将鼠标悬停在代码上方时,Netbeans注释“'void'type not allowed here”(无效)如果我可以问一下,第3行到第8行是什么意思,它对排序有什么帮助?当您希望根据对象中的自定义属性(即private int price;
)对数组排序时,使用Comparator。compare(…)
函数用于确定对象的顺序:如果a的价格大于b,或者b的价格大于a。在compare(…)
方法中,如果减法的结果是我看到的,我已经尝试了您的方法,但是对于第2行中的原始列表部分,我不知道如何引用当前的ArrayList,因为它是这样编码的:``公共类SoftDrinkList扩展了ArrayList{(这里的排序方法)}``你可以简单地用这个
关键字来引用它。因此,您将拥有arraylistcopy=newarraylist(这个)代码>