2014-02-20 45 views
0

我正在排序包含Calendar對象的對象的ArrayList。我希望根據調用排序方法時使用的參數對ArrayList進行升序或降序排序。通過Collection接口拒絕的索引向ArrayList添加元素

@Override 
public Collection<TwitterMessage> sortByTime(boolean newestFirst) { 
    Collection<TwitterMessage> results = new ArrayList<>(); 
    for (int i = 0; i < tweets.size(); i++) { 
     TwitterMessage tweet1 = tweets.get(i); 
     TwitterMessage tweet2 = tweets.get(i+1); 
     if(newestFirst = true) { 
      if(tweet1.dato().compareTo(tweet2.dato()) >= 0) { 
       results.add(0, tweet1); 
      } 
     } 
     else { 
      if(tweet1.dato().compareTo(tweet2.dato()) <= 0) { 
       results.add(0, tweet1); 
      } 
     } 
    } 
    return results; 
} 

我認爲這種方法是正確的。問題是在界面中指定的returntype是基於Collection接口的。我得到一個錯誤compilaton在

results.add(0, tweet1); 

線,因爲Collection接口只允許results.add(對象),而不是results.add(INT,對象)作爲一個ArrayList一樣。有沒有辦法將對象添加到索引中,即使這不在Collection接口中?

+1

另外'if(newestFirst = true)',肯定不是你要找的。它應該是'if(newestFirst == true)',或者甚至更好'if(newestFirst)'。 –

回答

4

簡單地聲明你的變量列表:

List<TwitterMessage> results = new ArrayList<>(); 

要排序的列表,你應該使用Collections.sort(),通過自定義的比較作爲參數。

+0

謝謝。爲什麼不按我實施它的方式來做呢?我很想學習最佳實踐背後的原因。 – user1736049

+0

因爲你已經實現它的方式,它不會編譯。爲了能夠調用特定於List類型的方法,必須將變量聲明爲List(或其任何子類),否則編譯器無法知道該集合的類型是List。 –

+0

對不起,我打算問爲什麼我應該使用Collections.sort()。我將結果變量聲明爲一個ArrayList,現在它編譯。 – user1736049