我想在每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++;
}
}
这似乎不能按要求工作。我怎么做到这一点?
答案 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));
}