2016-01-20 3 views
0

У меня есть список массива, который содержит следующее:метод Java CompareTo не работает, как ожидалось

{a2.name, a4.name, tr.prod_date, a3.name, a1.name, a5.name, a6.name, a7.name, a8.name, a9.name, a10.name} 

В моем методе - Я пытаюсь сравнить поля и сортировать их, чтобы они вернутся в алфавитном порядке.

 Collections.sort(dataJSON, new Comparator() { 
     public int compare(Object obj1, Object obj2) { 
      return ((ReportDetail) obj1).getReportColumn().compareTo(((ReportDetail) obj2).getReportColumn()); 
     } 
    }); 

К сожалению, результаты, которые я вижу в том, что a10.name придет впереди a2.name - я-то отсутствует или есть другой подход, я должен принимать?

+0

я получаю, что он не смотрит на a10 имеет единственное число, и это только берет первую цифру, но есть способ для сравнения полной строки. Я думаю, – Buccaneer

+1

Его сортировка лексически. Вы можете реализовать 'compareTo', чтобы извлечь номер и отсортировать его, если остальная часть строки такая же. – Atri

ответ

0

Вы можете сделать заказ Comparator как ReportComparator implements Comparator<ReportDetail>

Затем добавьте

public int compare(ReportDetail r1, ReportDetail r2) { 
      return Long.valueOf(r1.getReportColumn.subString(1,r1.getReport().length() - 1) -Long.valueOf(r2.getReportColumn.subString(1,r2.getReport().length() - 1); 
     } 
1

Это сравнение строк, так как вы не предоставили свой собственный метод сравнения. Из-за этого вы видите характер по сравнению с символом. Это означает, что 'a' == 'a', '1' < '2', поэтому он выпадает и сортирует их в порядке вашего видения. вам нужно написать свой собственный compareTo.