【问题标题】:Add item to arraylist at specific interval以特定间隔将项目添加到数组列表
【发布时间】:2016-11-09 11:10:43
【问题描述】:

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

ArrayList之后应该是这样的,

item|item|item|item|new_item|item|item|item|item|new_item|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++;
    }
}

这似乎没有按要求工作。我将如何实现这一目标?

【问题讨论】:

  • 试试这个myNews.add(i,news);

标签: java android arraylist


【解决方案1】:

为了使其更具可读性,您还可以尝试使用新的 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));
    }

【讨论】:

    【解决方案2】:

    问题是你的索引被插入元素弄乱了。解决这个常见问题的最佳方法是反向遍历列表,即从最后一项开始。

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 2014-03-13
      • 2022-06-29
      相关资源
      最近更新 更多