2014-11-01 55 views
0

這是正確的嗎?獲取列表中最舊的時間戳Java

ArrayList<Timestamp> timeStampList = new ArrayList<Timestamp>(); 
timeStampList.add(0, new Timestamp(System.currentTimeMillis())); 

Thread.sleep(600); 

timeStampList.add(1, new Timestamp(System.currentTimeMillis())); 

Collections.sort(timeStampList); 
Timestamp tempStamp = timeStampList.get(0); 
for (Timestamp startstamp : timeStampList) 
{ 
    if (tempStamp != startstamp) 
    { 
      long diffTime = startstamp.getTime() - tempStamp.getTime(); 
      diffDays = diffTime/(1000 * 60 * 60); 

      if(diffDays > 24) 
      { 
       System.out.println(diffDays/24 +"Day" + " "+diffDays % 24 + "hours"); 
      } 
      tempStamp = startstamp; 
    } 
} 

我不知道我怎麼能找到數組列表中最老的時間戳。任何意見或直接答覆表示讚賞。非常感謝。目前這個代碼我認爲只是比較。

編輯:所以假設我沒有在這個上下文中使用Collection.sort,我知道我應用了當我發佈,但讓我們假設我想知道如何比較並找到所有在arrayList中最老的時間戳通過for-loop。

+3

好吧,你已經對它們進行了排序,所以你的列表的下界是你最古老的。 – SnakeDoc 2014-11-01 22:52:12

+0

我是Java的新手,所以任何建議或幫助表示讚賞。最後一個意思是(self.size())是最老的時間戳嗎? – 2014-11-01 22:53:42

+1

'Collections.sort'使用升序排列,因此第一個元素將是最早的元素。 – Tom 2014-11-01 22:55:54

回答

2

如果根據你的文章,你不想排序你的數據,而是想迭代你的整個Timestamp對象集合並比較這種方式,你可以使用Timestamp的after()方法,它確定在作爲函數的參數提供的時間戳之後是否發生時間戳。

public Timestamp getOldestTimeStamp(ArrayList<Timestamp> timeStampList) 
{ 
    if (timeStampList != null || timeStampList.length() == 0) 
    { 
     return null; 
    } 

    Timestamp oldestTimestamp = timeStampList.get(0); 

    for (int i = 1; i < timeStampList.length(); i++) 
    { 
     if (oldestTimeStamp.after(timeStampList.get(i)) 
     { 
      oldestTimeStamp = timeStampList.get(i); 
     } 
    } 

    // oldestTimeStamp is now the oldest Timestamp in the ArrayList 

    return oldestTimeStamp; 
} 

我本可以發誓我在第一次編輯時加入了這個,但看起來好像沒有。評論中的每個人都希望你使用語言的內置功能,而不是自己動手。在這種情況下,你會更適合學習使用簡單的語言特性,比如Collections.sort()和Collections.min(),它們總是有效,通常比我們將要編寫的代碼更加高效,並且比上述的12行方法簡潔得多。