如何在Java中对ArrayList进行排序

ran*_*ith 217 java sorting collections arraylist

我有一个名为Fruit的课程.我正在创建此类的列表并在列表中添加每个水果.我想根据水果名称的顺序对此列表进行排序.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用for循环创建它的列表

List<Fruit>  fruits= new ArrayList<Fruit>();

Fruit fruit;
for(int i=0;i<100;i++)
{
   fruit = new fruit();
   fruit.setname(...);
   fruits.add(fruit);
}
Run Code Online (Sandbox Code Playgroud)

我需要使用列表中每个对象的水果名称对此arrayList进行排序

怎么样??

Pra*_*ran 417

使用Comparator这样的:

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);
        }
    });
Run Code Online (Sandbox Code Playgroud)

现在你的水果列表是根据fruitName.

  • 这种方法,使用`Comparator`,或@ BMT使对象实现`Comparable`的方法都可行.不同之处在于,通过实现`Comparable`,你会说排序是对象性质的基本部分(如整数或字符串),而使用`Comparator`,你就是说这个特定的上下文,你想要他们以某种方式订购. (68认同)
  • 怎么排序的顺序?上升还是下降? (6认同)
  • 如果水果名称区分大小写,那么你应该使用compareToIgnoreCase (3认同)

bNd*_*bNd 89

实现Fruit的Comparable接口.

public class Fruit implements Comparable<Fruit> {
Run Code Online (Sandbox Code Playgroud)

它实现了该方法

@Override
    public int compareTo(Fruit fruit) {
        //write code here for compare name
    }
Run Code Online (Sandbox Code Playgroud)

然后调用sort方法

Collections.sort(fruitList);
Run Code Online (Sandbox Code Playgroud)

  • 可比较应该是Comparable <Fruit>与compareTo(Fruit fruit)一起使用 (13认同)
  • `Collections.sort(..)`也适用于`ArrayList <T>`其中`T`是`Integer`,`Long`,`String`,它们都实现了`compareTo(..)`方法. (7认同)
  • @ b101:在这种情况下,您可以编写多个比较器,并在正确的位置插入正确的比较器.类似于:``Comparator comp1 = new Comparator <Fruit>(){@\Override public int compare(Fruit fruit2,Fruit fruit1){return fruit1.fruitName.compareTo(fruit2.fruitName); }}; Collection.sort(fruitList,comp1);`` (2认同)

new*_*ser 15

试试BeanComparator

import org.apache.commons.beanutils.BeanComparator;


BeanComparator fieldComparator = new BeanComparator("fruitName");
Collections.sort(fruits, fieldComparator);
Run Code Online (Sandbox Code Playgroud)