2014-02-20 44 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