如何在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);
        }
    });