【问题标题】:Sort an arrayList with multiple objects对具有多个对象的 arrayList 进行排序
【发布时间】:2016-04-15 21:40:46
【问题描述】:

我列出了Animals 如下:

        ArrayList<Animal> animals = new ArrayList<Animal>();
        animals.add(new Animal(1, "animal1", 50, "10 Janvier 2016", "Noir", 4, true));
        animals.add(new Animal(2, "animal2", 50, "10 Janvier 2016", "Noir", 4, true));
        animals.add(new Animal(3, "animal3", 50, "10 Janvier 2016", "Noir", 4, true));
        animals.add(new Animal(4, "animal4", 50, "10 Janvier 2016", "Noir", 4, true));
        animals.add(new Animal(5, "animal5", 50, "10 Janvier 2016", "Noir", 4, true));

我想按 ID 对 ArrayList 中的动物列表进行排序。据我所见,我必须使用比较器。

这是我到目前为止创建的......

public class ComparatorAnimal implements Comparator<Animal> {

    public int compare(Animal animals.get(0), Animal animals.get(1) {
        return animals.get(0).idAnimal - animals.get(1).idAnimal;
    }

【问题讨论】:

  • Comperator 接口实际上告诉您必须实现的方法的签名。如果您的类中没有带有此签名的方法,那么它将无法编译,我想现在就是这种情况。好吧,您不能将变量命名为 animals.get(0)
  • 此类问题已被多次询问和回答。这是一个重复的问题。

标签: java object arraylist


【解决方案1】:
public class ComparatorAnimal implements Comparator<Animal> {

public int compare(Animal animals.get(0), Animal animals.get(1) {
    return animals.get(0).idAnimal - animals.get(1).idAnimal;
}

方法签名错误:您不是在比较两个Animal 列表,而是比较两个Animal 对象。 然后你正在比较两个id,你不需要减去它。只需使用 Integer 类中的相同方法即可。

像这样改变你的方法:

public class ComparatorAnimal implements Comparator<Animal> {

public int compare(Animal o1, Animal o2) {
    return Integer.compare(o1.idAnimal, o2.idAnimal);
}

现在您必须使用排序集合(例如 TreeMap 而不是 ArrayList)或调用 Collections.sort(yourList, yourComparator)

【讨论】:

    【解决方案2】:

    改变

    public int compare(Animal animals.get(0), Animal animals.get(1) {
        return animals.get(0).idAnimal - animals.get(1).idAnimal;
    }
    

    public int compare(Animal animal1, Animal animal2 {
        if(animal1.idAnimal > animal2.idAnimal)
            return 1;
        else if(animal1.idAnimal < animal2.idAnimal)
            return -1;
    
        return 0;
    }
    

    & 然后使用

    Collections.sort(animals, new ComparatorAnimal());
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      相关资源
      最近更新 更多