【问题标题】:Sorting an array alphabetically, but the array is full of objects, and I need to sort by a particular parameter按字母顺序对数组进行排序,但数组中充满了对象,我需要按特定参数排序
【发布时间】:2017-09-17 19:31:45
【问题描述】:

假设我有一个像这样的对象:

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;
    }
}

我想按名称的字母顺序对一个充满 Fruit 对象的数组进行排序。我最初的想法是,Arrays.sort(a.getName()); 行不通,因为.getName() 仅适用于单个对象。我的一个想法是将所有名称放入一个数组中,按字母顺序对它们进行排序,然后运行一个循环以使用此列表对对象进行排序,但这似乎非常麻烦。

有什么想法吗?如您所知,我对以这种方式处理对象非常陌生。

【问题讨论】:

  • 假设post 可以解决您的问题。假设你需要实现Comparator。这可能是refer 的好地方。

标签: java arrays sorting


【解决方案1】:

要么通过实现compareTo 方法来创建Fruit 类Comparable,要么为Arrays.sort 方法提供自定义Comparator:

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

这使用Comparator.comparing 方法。

【讨论】:

  • 哦哦,我喜欢这个。
【解决方案2】:

我建议您重新定义 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,它会按名称按字典顺序对它们进行排序。

【讨论】:

  • 非常智能和干净的解决方案
【解决方案3】:

你不需要让你的Fruit类实现Comparable&lt;Fruit&gt;;你可以通过passing a custom Comparator 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 */ }
});

【讨论】:

    猜你喜欢
    • 2019-06-15
    • 2017-02-19
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2013-11-02
    相关资源
    最近更新 更多