2016-07-05 232 views
0

在我的Android應用程序中,我試圖獲得一個有序數組。我有一個具有名稱字符串和日期字符串的數組數組。我試圖根據日期對名稱進行排序。是這樣的:如何按日期對數組進行排序?

private void sortList() { 
    String[][] namesAndDatesList = new String[][] { 
       new String[] {"name1", "05/03/2016 02:11:33")} 
      , new String[] {"name2", "04/03/2016 02:11:34"} 
      , new String[] {"name3", "04/03/2016 02:11:33")} 
      , new String[] {"name4", "02/03/2016 02:11:33")} 
      , new String[] {"name5", "05/03/2016 02:11:38")} 
    }; 

    String[] namesList = Collections.sort(namesAndDatesList, new StringDateComparator()); 

} 

class StringDateComparator implements Comparator<String> 
{ 
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); 
    public int compare(params) 
    { 
     try { 
      // return something 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return 0; 
    } 
} 

我會把它想輸出按日期和時間排序一樣的名字:

namesList = {name4, name3, name2, name1, name5} 

我不知道如何做到這一點。

+0

對於初學者,您正在嘗試做2件事。對數組進行排序,並從子數組中提取一個信息。 – njzk2

+0

而那不可能?在一個總監?因爲那不是比較者所做的事情,所以我總是可以在排序之後提取姓名 – Mischa

+0

。你需要先排序,然後提取你需要的值 – njzk2

回答

2

你應該解析字符串轉換成日期,然後進行比較,爲Android可以使用Arrays.sort方法並傳遞一個匿名比較

例子:

private void sort2dArray() { 
String[][] namesAndDatesList = new String[][] { new String[] { "name1", "05/03/2016 02:11:33" }, 
    new String[] { "name2", "04/03/2016 02:11:34" }, new String[] { "name3", "04/03/2016 02:11:33" }, 
    new String[] { "name4", "02/03/2016 02:11:33" }, new String[] { "name5", "05/03/2016 02:11:38" } }; 

Arrays.sort(namesAndDatesList, new Comparator<String[]>() { 

    @Override 
    public int compare(String[] o1, String[] o2) { 

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
    Date d1 = null; 
    Date d2 = null; 
    try { 
     d1 = sdf.parse(o1[1]); 
     d2 = sdf.parse(o2[1]); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    return d1.compareTo(d2); 
    } 
}); 
System.out.println(Arrays.deepToString(namesAndDatesList)); 
} 
+0

我試圖實現這個,但問題是o1和o2被定義爲數組中的第一項,所以它試圖比較名稱而不是日期。我需要改變以解決這個問題? – Mischa

+0

Nop ... o1 [1]和o2 [1]是字符串中的元素2(在索引1處).... –

+0

沒關係,那是不正確的。 – Mischa

1

這似乎是你在找什麼:java Arrays.sort 2d array

或者,您可以創建具有兩個屬性(名稱,日期)的自定義類,然後創建一個實現比較一個CustomClassComparator。

0

java.time

accepted answer是正確的,但使用過時的類作爲問題。 java.util.Date類被嵌入到Java 8及更高版本中的java.time框架所取代。這些課程取代了舊的麻煩日期時間課程,如java.util.Date。見Oracle Tutorial。許多功能已被移植到ThreeTen-Backport中的Java中,並進一步適用於Android中的ThreeTenABP

使用java.util.Date類的代碼意味着數據輸入在UTC時區。但是我們不能僅僅根據給定的數據做出這樣的假設。所以更合適的是LocalDateTime類別故意缺少任何offset-from-UTC或時區信息。

String input = "04/03/2016 02:11:34"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"); 
LocalDateTime ldt = LocalDateTime.parse(input , formatter); 

該答案中的其他邏輯保持不變。 LocalDateTime類實現compareTo

相關問題