将对象与另一个扩展第一个对象的对象进行比较

时间:2016-02-10 13:06:12

标签: java sorting collections

我正在尝试比较混合时的两个对象列表。我有一个班级Sms和另一个班级ArchivedSms extends Sms

如何使用Collections.sort(collection, comparator)比较这些对象的列表?

List<Sms> smses = new ArrayList<Sms>();
List<ArchivedSms> archivedSmses = new ArrayList<ArchivedSms>();

smses.addAll(archivedSmses);

如何比较这些对象假设它们具有相同的字段,因此我想比较一些字符串的phoneNumbers。

1 个答案:

答案 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函数一样做(因为那是一个功能界面)。