我正在尝试比较混合时的两个对象列表。我有一个班级Sms
和另一个班级ArchivedSms extends Sms
。
如何使用Collections.sort(collection, comparator)
比较这些对象的列表?
List<Sms> smses = new ArrayList<Sms>();
List<ArchivedSms> archivedSmses = new ArrayList<ArchivedSms>();
smses.addAll(archivedSmses);
如何比较这些对象假设它们具有相同的字段,因此我想比较一些字符串的phoneNumbers。
答案 0 :(得分:3)
您应该编写自己的比较器来实现Comparator<Sms>
public class SmsComparator implements `Comparator<Sms>` {
@Override
public bool compare(Sms o1, Sms o2) {
// Implement comparison logic
}
}
假设每个Sms
实例都有一个字段int a
,所以比较器看起来像这样:
public class SmsComparator implements `Comparator<Sms>` {
@Override
public bool compare(Sms o1, Sms o2) {
if(o1.getA() > o2.getA()) return 1;
else if(o1.getA() > o2.getA()) return -1;
else return 0;
}
}
调用Collections.sort
时,您可以执行相同的内联:
Collections.sort(smes, new Comparator<Sms>() {
@Override
public bool compare(Sms o1, Sms o2) {
if(o1.getA() > o2.getA()) return 1;
else if(o1.getA() > o2.getA()) return -1;
else return 0;
}
})
在java 8中,你可以像lambda函数一样做(因为那是一个功能界面)。