Java:排序列表<list <t>&gt;根据特定指数

时间:2016-09-05 10:03:42

标签: java list comparator

我正在编写程序来排序List&gt; (使用泛型)。但是,不确定如何在比较器中处理通用数据类型。

这是我到目前为止所写的内容。

public void sort(final int columnNumber){
    Collections.sort(this.listTable,new Comparator<List<T>>(){
        @Override
        public int compare(List<T> o1, List<T> o2) {
            int compareInt = 0;
            Object obj1 = o1.get(columnNumber);
            Object obj2 = o2.get(columnNumber);
            if(obj1.getClass().equals(obj2.getClass())){
                if(obj1.getClass().toString().endsWith(".String")){
                    compareInt = obj1.toString().compareTo(obj2.toString());
                }
                else if(obj1.getClass().toString().endsWith(".Integer")){
                    compareInt = (Integer)obj1 - (Integer)obj2;
                }
                else{
                    compareInt = obj1.toString().compareTo(obj2.toString());
                }

            }
            return compareInt;
        }
    });
}

1 个答案:

答案 0 :(得分:1)

不要使用getClass()。toString()来比较类型。使用instanceof并尽可能通过通用接口对类型进行分组。例如,CharSequence是String,StringBuilder和StringBuffer的通用接口。

这是一种方法。您可能希望重新比较比较方法,以比较您拥有的任何类型,例如日期或URL或自定义对象。

class AccountConfiguration : EntityTypeConfiguration<Account>
  public AccountConfiguration()
  {
    HasKey(x => x.Id);
    ...
  }
}

class IndividualAccountConfiguration : EntityTypeConfiguration<IndividualAccount>
{
  public IndividualAccountConfiguration()
  {
    ToTable("IndividualAccounts");
    ...
  }
}

class DoctorConfiguration : EntityTypeConfiguration<Doctor>
{
  public DoctorConfiguration()
  {
    ...
  }
}