我有一个对象的arraylist,对象有“double”值。我需要打印出所有对象,并首先打印具有最高值的对象,最后打印具有最低值的对象。
我还尝试使用Collections对arraylist进行排序然后打印,但我似乎无法让它工作。
我的arraylist是:
ArrayList<Transition> transitions = new ArrayList<Transition>();
当我尝试使用我使用的集合时:
Object minValue = Collections.min(transitions);
希望你们中的一些人可以帮忙:)
答案 0 :(得分:3)
如果Transition对象实现了Comparable接口,请尝试这种方式。它应该工作。
Collections.sort(transitions);
Transition transition = transitions.get(0);
答案 1 :(得分:1)
仅仅因为Transition
有double
个值,不会使Transition
具有可比性。您必须实现Comparator或将Transition定义为实现Comparable
,然后实现comparTo()方法。您可以通过该double值比较两个对象。然后,您可以使用sort()
和min()
Java不知道如何比较对象,除非您告诉它对象的可比性。有些课程具有可比性,例如String
课程,Date
,Integer
等。
编辑:使转换可比较
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的参考资料。