对象的Arraylist - 最小的值

时间:2013-11-14 05:42:32

标签: java collections arraylist min

我有一个对象的arraylist,对象有“double”值。我需要打印出所有对象,并首先打印具有最高值的对象,最后打印具有最低值的对象。

我还尝试使用Collections对arraylist进行排序然后打印,但我似乎无法让它工作。

我的arraylist是:

ArrayList<Transition> transitions = new ArrayList<Transition>();

当我尝试使用我使用的集合时:

Object minValue = Collections.min(transitions);

希望你们中的一些人可以帮忙:)

4 个答案:

答案 0 :(得分:3)

如果Transition对象实现了Comparable接口,请尝试这种方式。它应该工作。

 Collections.sort(transitions);
 Transition transition = transitions.get(0);

答案 1 :(得分:1)

仅仅因为Transitiondouble个值,不会使Transition具有可比性。您必须实现Comparator或将Transition定义为实现Comparable,然后实现comparTo()方法。您可以通过该double值比较两个对象。然后,您可以使用sort()min()

Java不知道如何比较对象,除非您告诉它对象的可比性。有些课程具有可比性,例如String课程,DateInteger等。

编辑:使转换可比较

public class Transition implements Comparable<Transition> {
    double value;

    public Transition(double value){
        this.value = value;
    }

    public int compareTo(Transition t){
        if (this.value > t.value) {  // your comparing the Transitionss by the 'value'
            return 1;
        }
        else if (this.value == t.value){
            return 0;
        }
        else {
            return -1;
        }
    }
}

class SomeClass {
    public static void main(String [] args){
        Transition tranny1 = new Transition(5);
        Transition tranny2 = new Transition(6);

        ArrayList<Transition> trannys = new ArrayList<>();

        trannys.add(tranny1);
        trannys.add(tranny2);

        Collections.sort(trannys);
        double lowTrannyValue = trannys.get(0).value;
    }
}

答案 2 :(得分:0)

List<Transition> transitions = new ArrayList<Transition>();    
//fill list
Collections.sort(transitions, new Comparator<Transition>() {
                @Override
                public int compare(Transition lhs, Transition rhs) {
                    if (lhs.doubleValue > rhs.doubleValue)
                       return 1;
                    if (lhs.doubleValue < rhs.doubleValue)
                       return -1;
                    return 0;
                }
            });

System.out.print(transitions.get(0)); // smallest value

答案 3 :(得分:0)

正如其他人所说,如果你想使用Collections.sort(),你必须Transition实现Comparable接口,这意味着包含.compareTo()并修改你的类标题到:

public class Transition implements Comparable<Transition>

或者,你可以这样做:

Collections.sort(transitions, new Comparator<Transition>() {
    @Override
    public int compareTo(Transition t1, Transition t2) {
          return t1.getDoubleValue().compareTo(t2.getDoubleValue());
    }
});

其中getDoubleValue()只是我用来表示Transition类中返回您在帖子中引用的Double的方法的名称。如果您不想使用Double,那么您可以按如下方式编写.compareTo()(注意:使用条件三元运算符代替if语句):

@Override
public int compareTo(Transition t1, Transition t2) {
      return t1.getDoubleValue() > t2.getDoubleValue() ? 1 : 
             t1.getDoubleValue() < t2.getDoubleValue() ? -1 : 0;
}

以下是Object Ordering in Java的参考资料。