Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Collections.sort(arrayListName)按对象id对ArrayList中的所有对象进行排序_Java_Sorting_Arraylist_Comparator_Comparable - Fatal编程技术网

Java 使用Collections.sort(arrayListName)按对象id对ArrayList中的所有对象进行排序

Java 使用Collections.sort(arrayListName)按对象id对ArrayList中的所有对象进行排序,java,sorting,arraylist,comparator,comparable,Java,Sorting,Arraylist,Comparator,Comparable,我有一个inventory类,它创建了一个充满对象项的ArrayList,这也是一个类。我知道我必须打电话 Collections.sort(项目)以便对ArrayList进行排序(顺便说一下,它被称为items)。分配说明我必须在Item类上使用接口,我不知道是否要实现Comparator或Comparable,然后分别为compareTo()方法或compare()方法编写什么。另外,在声明ArrayList之后,我立即调用了Collections.sort(items)调用,可以吗 编辑:

我有一个inventory类,它创建了一个充满对象项的ArrayList,这也是一个类。我知道我必须打电话
Collections.sort(项目)以便对ArrayList进行排序(顺便说一下,它被称为items)。分配说明我必须在Item类上使用接口,我不知道是否要实现Comparator或Comparable,然后分别为
compareTo()
方法或
compare()
方法编写什么。另外,在声明ArrayList之后,我立即调用了
Collections.sort(items)
调用,可以吗


编辑:我的老师刚刚澄清,她希望我们在Item类上实现
Compariable

您必须实现
Compariable
,它将在
集合中起作用。排序

如果您需要一个新的比较器并且不想使用
Comparable
,您可以创建一个新的
comparator
并像这样使用它:
Collections.sort(list,new MyComparator())

公共类{
私有字符串名称;
私有字符串;
私人整数数量;
公共水果(字符串FROUTCNAME、字符串FROUTCDESC、整数数量){
超级();
this.fruthName=fruthName;
this.fruitDesc=fruitDesc;
这个。数量=数量;
}
公共字符串getFruthName(){
返回水果名;
}
public void setFruitName(字符串fruitName){
this.fruthName=fruthName;
}
公共字符串getFruitDesc(){
返回结果描述;
}
public void setFruitDesc(字符串fruitDesc){
this.fruitDesc=fruitDesc;
}
公共整数getQuantity(){
退货数量;
}
公共无效设置数量(整数数量){
这个。数量=数量;
}
公共内部比较(水果比较和葡萄柚){
int compareQuantity=((水果)compare柚子).getQuantity();
//升序
返回此.quantity-comparequality;
//降序
//return comparequality-this.quantity;
}   
}

来源:

有两个版本的
Collections.sort()

和。一个获取
列表
,另一个获取
列表
比较器
的实例。单个参数
sort()
期望您的类已经实现并重写了该方法。双参数
sort()
方法需要一个实例,您已经在其中实现了
比较器并重写了它的方法

一个对象应该实现
Comparable
,如果这是对类进行排序的明确自然的方式,那么任何需要对类进行排序的人通常都希望这样做

但是,如果排序是类的一个不寻常的用例,或者可以有多个排序顺序,那么
比较器是一个更好的选择

我还有Collections.sort(items)调用,就在我声明ArrayList之后,可以吗

需要对
列表进行排序时,将调用
sort()
。在
sort()
之后添加项目不会自动对
列表进行排序,以适应由于添加新元素而导致的列表项目顺序的变化

示例实现:

public int compareTo (Item other) { 
   return new Integer(this.getID()).compareTo(new Integer(other.getID()));
}
自Java 8以来:

List<Item> items = new ArrayList<>();
// add elements
Collections.sort(items, Comparator.comparingLong(Item::getId));
List items=new ArrayList();
//添加元素
Collections.sort(items,Comparator.comparingLong(Item::getId));

因此我得到了Item实现Comparable,然后在类中我将compareTo()定义为public int compareTo(Item other){if(this.id.compareTionOreCase((other.getId())==0)返回0;else if(this.id.compareTionOreCase(other.getId())>0)返回1;else返回-1;}现在我是不是在我的Inventory类中调用了Collections.sort(items)?这就是我的想法,但是当我编写Collections.sort(items)时,它给了我一个错误;它说-Syntax error on token“items”,variabledclaratorid在这个token之后应该是-Syntax error on token(s),misplaced construct(s)等等,我刚刚得到它,我正在把它放在类的主体中,谢谢!我讨厌有链接的解决方案。这不是一个解决办法。你的一个链接是Dead@trixo更新。删除了坏链接,我从其中一个链接中添加了一个简短的实现,指定了源:)我必须使用只调用集合的实现。排序(项目)好的,但基于哪个字段?什么意思,我不明白对不起
List<Item> items = new ArrayList<>();
// add elements
Collections.sort(items, Comparator.comparingLong(Item::getId));