有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java按字母顺序对数组进行排序,但数组中充满了对象,我需要按特定参数进行排序

假设我有一个对象,比如:

public class Fruit{

private String name;
private int quantity;

    Fruit(){}
    Fruit(String name, int quantity){
        this.name = name;
        this.quantity= quantity;
    }

    public int getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

我想按名称的字母顺序对一个装满水果的数组进行排序。我最初的想法是,Arrays.sort(a.getName());不起作用,因为.getName()只对单个对象起作用。我的一个想法是将所有名称放入一个数组中,按字母顺序排序,然后使用这个列表运行一个循环来对对象进行排序,但这看起来非常麻烦

有什么想法吗?可以看出,我对以这种方式处理对象非常陌生


共 (3) 个答案

  1. # 1 楼答案

    您不需要让Fruit类实现Comparable<Fruit>;您可以通过passing a custom ^{} to the array来完成,如下所示:

    Array<Fruit> sortedArray = sort(fruitArray, new Comparator<Fruit>() {
       public int compare(Fruit left, Fruit right) {
           return left.name.compareTo(right.name);
       }
       public int equals(Object obj) { return 0; /* you can ignore this */ }
    });
    
  2. # 2 楼答案

    您可以通过实现compareTo方法来创建FruitComparable,或者为Arrays.sort方法提供一个自定义的Comparator

    Arrays.sort(fruits, Comparator.comparing(Fruit::getName));
    

    这使用了^{}方法

  3. # 3 楼答案

    我建议您重新定义Fruit类以实现Comparable<Fruit>,以便您可以轻松地按每个元素各自的name字段对Fruit[]进行排序:

    public class Fruit implements Comparable<Fruit> {
        // Code here...
    
        @Override
        public int compareTo(Fruit fruit) {
            return name.compareTo(fruit.name);
        }
    }
    

    现在,您可以在Fruit[]上调用Arrays#sort,它将按名称按字典顺序对它们进行排序