2017-04-06 142 views
-1

我有陣列的List其中每個陣列(array[4])的第五元素是Date類型的,並且每個陣列(array[3])的第四個要素是String類型。我正在嘗試根據日期對字符串進行排序List。我嘗試過使用Collections.sort()使用自定義Comparator,但沒有成功:排序列表

List <Object[]> execute(List <Object[]> resultList){ 

      Collections.sort(resultList, new Comparator<Object[]>() { 
       public int compare(Object[] array, Object[] otherArray) { 
        int dateComparison = array[4].compareTo(otherArray[4]); 
        return dateComparison == 0 ? array[3].compareTo(otherArray[3]) : dateComparison; 
       } 
      }); 

    return resultList; 
    } 

輸入

02.02.2017 10:00 B 
02.02.2017 09:00 A 
01.02.2017 18:00 AC 
01.02.2017 16:00 AB 
02.02.2017 11:00 C 
01.02.2017 13:00 AA 
02.02.2017 12:00 D 
01.02.2017 21:00 AD 

輸出應該看起來像 - >

01.02.2017 13:00 AA 
01.02.2017 16:00 AB 
01.02.2017 18:00 AC 
01.02.2017 21:00 AD 
02.02.2017 09:00 A 
02.02.2017 10:00 B 
02.02.2017 11:00 C 
02.02.2017 12:00 D 

EDIT1

我實現了一個簡單的例子:

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.Date; 
import java.util.List; 


public class Comperable { 

    public static void main(String[] args) { 

     try { 
      DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      List<Object[]> resultList = new ArrayList<Object[]>(); 
      Object[] array1 = { dateFormat.parse("2017-02-25 16:10:00.0"), "C" }; 
      Object[] array2 = { dateFormat.parse("2017-02-20 16:50:00.0"), "CB" }; 
      Object[] array3 = { dateFormat.parse("2017-02-19 19:42:00.0"), "AB" }; 
      Object[] array4 = { dateFormat.parse("2017-02-20 19:46:00.0"), "BA" }; 
      Object[] array5 = { dateFormat.parse("2017-02-16 19:33:58.0"), "ZC" }; 
      Object[] array6 = { dateFormat.parse("2017-02-16 19:45:10.0"), "A" }; 
      Object[] array7 = { dateFormat.parse("2017-02-16 20:47:48.0"), "B" }; 
      resultList.add(array1); 
      resultList.add(array2); 
      resultList.add(array3); 
      resultList.add(array4); 
      resultList.add(array5); 
      resultList.add(array6); 
      resultList.add(array7); 
      Collections.sort(resultList, new Comparator<Object[]>() { 

       public int compare(Object[] array, Object[] otherArray) { 
        int dateComparison = (((Date) array[0]).compareTo((Date) otherArray[0])); 
        return dateComparison == 0 ? ((String) array[1]).compareTo((String) otherArray[1]) : dateComparison; 
       } 
      }); 

      for (int i = 0; i <= resultList.size() - 1; i++) { 
       Object[] row = resultList.get(i); 
       System.out.println("Date: " + row[0] + " name: " + row[1]); 

      } 

     } catch (ParseException e) { 

      e.printStackTrace(); 
     } 

    } 

} 
+0

好吧,考慮到你的代碼,你正在與array [4]和_then_ array [3] – njzk2

+2

進行比較,你期望'array [4] .compareTo(otherArray [4])做什麼?這2個「對象」應該是什麼比較? – njzk2

+0

我不明白你的問題。也許包括所需的輸入和輸出將有助於 –

回答

2

主要的事情是,你需要轉換Object類型Date類型和調用compareTo方法。

(1)鑄造的array[4]otherArray[4]類型日期型,然後調用compareTo

(2)此外,鑄造的array[3]otherArray[3]String類型,然後將型和呼叫compareTo

你可以其內部註釋參考下面的代碼:

Collections.sort(resultList, new Comparator<Object[]>() { 
    public int compare(Object[] array, Object[] otherArray) { 

    //do the Date comparison by casting Object to Date 
    int dateComparison = (((Date)array[4]).compareTo((Date)otherArray[4])); 

     //Now, do the String comparison by casting Object to String 
    return dateComparison == 0 ? 
      ((String)array[3]).compareTo((String)otherArray[3]) : dateComparison; 
     } 
}); 

我想在日期之後,然後在字符串之後對列表進行排序,因爲 我想要在碧玉報告中打印數據。在我的情況下,我不能 管理數據庫中的排序。

上面的代碼完全不相同,它首先將Date對象進行比較,如果它們相等,則它會比較字符串。

+0

Java使用運行時多態性。演員是不必要的。 –

+0

如果你不應用轉換,你如何在'java.lang.Object'上調用'compareTo'方法? – developer

+0

良好的通話。你只需要轉換成「Comparable」或任何實現它的東西。投票翻轉。 –