1

我有一个对象数组列表,并且对象具有“双”值。我需要打印出所有对象,首先打印具有最高值的对象,最后打印具有最低值的对象。

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

我的数组列表是:

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

当我尝试使用 Collections 时,我使用了:

Object minValue = Collections.min(transitions);

希望你们中的一些人可以提供帮助:)

4

4 回答 4

3

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

 Collections.sort(transitions);
 Transition transition = transitions.get(0);
于 2013-11-14T05:45:39.350 回答
1

仅仅因为TransitionHASdouble值,没有Transition可比性。您必须实现 Comparator 或将 Transition 定义为实现,Comparable然后实现 comparTo() 方法。您可以通过该双精度值比较两个对象。然后你可以使用sort()andmin()

Java 不知道如何比较对象,除非你告诉它对象是如何比较的。有些类具有可比性,例如Stringclass、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;
    }
}
于 2013-11-14T05:51:43.777 回答
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
于 2013-11-14T05:50:03.573 回答
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());
    }
});

wheregetDoubleValue()只是我用来表示您的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;
}

这是Java 中对象排序的参考。

于 2013-11-14T06:13:52.400 回答