如何在Java中对ArrayList排序
我有一门课叫水果。我正在创建这个类的列表,并将每个水果添加到列表中。我想根据水果名称的顺序对这个列表进行排序如何在Java中对ArrayList排序,java,sorting,collections,arraylist,Java,Sorting,Collections,Arraylist,我有一门课叫水果。我正在创建这个类的列表,并将每个水果添加到列表中。我想根据水果名称的顺序对这个列表进行排序 public class Fruit{ private String fruitName; private String fruitDesc; private int quantity; public String getFruitName() { return fruitName; } public void setF
public class Fruit{
private String fruitName;
private String fruitDesc;
private int quantity;
public String getFruitName() {
return fruitName;
}
public void setFruitName(String fruitName) {
this.fruitName = fruitName;
}
public String getFruitDesc() {
return fruitDesc;
}
public void setFruitDesc(String fruitDesc) {
this.fruitDesc = fruitDesc;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
}
我正在使用for循环创建它的列表
List<Fruit> fruits= new ArrayList<Fruit>();
Fruit fruit;
for(int i=0;i<100;i++)
{
fruit = new fruit();
fruit.setname(...);
fruits.add(fruit);
}
List fruits=new ArrayList();
水果;
对于(inti=0;iImplementcompariable与水果的接口
public class Fruit implements Comparable<Fruit> {
然后调用排序方法
Collections.sort(fruitList);
从Apache尝试
使用比较器,如下所示:
List<Fruit> fruits= new ArrayList<Fruit>();
Fruit fruit;
for(int i = 0; i < 100; i++)
{
fruit = new Fruit();
fruit.setname(...);
fruits.add(fruit);
}
// Sorting
Collections.sort(fruits, new Comparator<Fruit>() {
@Override
public int compare(Fruit fruit2, Fruit fruit1)
{
return fruit1.fruitName.compareTo(fruit2.fruitName);
}
});
List fruits=new ArrayList();
水果;
对于(int i=0;i<100;i++)
{
水果=新水果();
果.集名(…);
水果。添加(水果);
}
//分类
Collections.sort(水果,新比较器(){
@凌驾
公共整数比较(水果水果2,水果水果1)
{
返回FROUT1.FROUTNAME.compareTo(FROUT2.FROUTNAME);
}
});
现在,您的水果列表是基于水果名
排序的,无论是使用比较器的这种方法,还是@BMT使对象实现可比
的方法都会起作用。不同的是,通过实现可比
,您的意思是排序是e对象(如整数或字符串),而通过使用比较器
,您的意思是,在这个特定的上下文中,您希望它们以某种方式排序。排序的顺序如何?升序还是降序?如果水果名称区分大小写,那么您应该使用CompareToIgnoreCase我认为“自java-8”一节中给出的答案这里更简洁:@Silent\u它是升序的。如果你想让它降序,你需要在排序后反转列表。这很单调,同意。集合。排序(…)
也适用于ArrayList
,其中T
是Integer
,String
,它们都有它们的比较(…)
实施的方法。Compariable应与Comparieto(水果)的工作相比较如果我想添加多个不同的排序选项,例如覆盖compareTo方法以按对象名称排序,但添加另一个用于按年龄、产品id等排序的选项,那么您的方法会是什么样子的@b101:在这种情况下,您可以编写多个比较器,然后在正确的位置插入正确的比较器。类似:Comparator comp1=新的Comparator(){@\Override public int compare(水果水果2,水果水果1){返回水果1.水果名.compareTo(水果2.水果名);};Collection.sort(结果列表,comp1)代码>尝试以下操作:
import org.apache.commons.beanutils.BeanComparator;
BeanComparator fieldComparator = new BeanComparator("fruitName");
Collections.sort(fruits, fieldComparator);
List<Fruit> fruits= new ArrayList<Fruit>();
Fruit fruit;
for(int i = 0; i < 100; i++)
{
fruit = new Fruit();
fruit.setname(...);
fruits.add(fruit);
}
// Sorting
Collections.sort(fruits, new Comparator<Fruit>() {
@Override
public int compare(Fruit fruit2, Fruit fruit1)
{
return fruit1.fruitName.compareTo(fruit2.fruitName);
}
});