以特定间隔将项目添加到arraylist

时间:2016-11-09 11:10:43

标签: java android arraylist

我想在每4个项目之后向ArrayList添加一个元素。

ArrayList之后应该是这样的,

项|项|项|项|的 NEW_ITEM |项|项|项|项|的 NEW_ITEM |项...

所以我使用代码

int x=0;
for (int i=1;i<myNews.size();i++) {           
    if (i%4==0) {
        NewsData news = new NewsData();
        news.setId(999);
        news.setItem_type(3);
        news.setCat_id(97);
        myNews.add(i+x,news);
        x++;
    }
}

这似乎不能按要求工作。我怎么做到这一点?

2 个答案:

答案 0 :(得分:1)

问题是你的索引因插入元素而搞砸了。解决这个常见问题的最好方法是以相反的方式遍历列表,即从最后一项开始。

for (int i=myNews.size()-1;i>0;i--) {           
  if (i%4==0) {
    NewsData news = new NewsData();
    news.setId(999);
    news.setItem_type(3);
    news.setCat_id(97);
    myNews.add(i,news);
  }
}

如果您想避免遍历所有项目并且只想迭代您要插入项目的位置,您必须找出要插入的最后一项:

int last = myNews.size() / 4 * 4;
if (last == myNews.size())
    last -= 4;
for (int i = last; i > 0;i -= 4) {           
    NewsData news = new NewsData();
    news.setId(999);
    news.setItem_type(3);
    news.setCat_id(97);
    myNews.add(i, news);
}

答案 1 :(得分:0)

为了使其更具可读性,您还可以尝试使用新的ArrayList。 循环遍历现有数组列表并将元素添加到新ArrayList,条件是每个第4个元素都是新的。

    List<NewsData> myNews = new ArrayList<>();
    List<NewsData> newNews = new ArrayList<>();

    for (int i = 0; i < myNews.size(); i++) {
        if (i % 4 == 0) {
            NewsData news = new NewsData();
            news.setId(999);
            news.setItem_type(3);
            news.setCat_id(97);
            myNews.add(news);
        }
        newNews.add(myNews.get(i));
    }