通过Collection接口拒绝索引将元素添加到ArrayList

时间:2014-02-20 13:32:53

标签: java arraylist calendar compareto

我正在对包含Calendar对象的对象的ArrayList进行排序。我希望根据调用排序方法时使用的参数对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(object),而不是result.add(int,object)作为ArrayList。有没有办法将对象添加到索引中,即使这不在Collection接口中?

1 个答案:

答案 0 :(得分:4)

只需将您的变量声明为List:

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

要对列表进行排序,您应该使用Collections.sort(),将自定义比较器作为参数传递。