Reputation: 185
I am trying to add an element to ArrayList
after every 4 items.
ArrayList
after this should be like,
item|item|item|item|new_item|item|item|item|item|new_item|item...
So I use the code
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++;
}
}
This doesn't seem to work as required. How would I achieve this?
Upvotes: 0
Views: 820
Reputation: 469
To make it more readable, you can also try using a new ArrayList. Loop through an existing array list and add elements to new ArrayList with an condition of every 4th element is new.
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));
}
Upvotes: 3
Reputation: 16651
The problem is that your index gets messed up by inserting elements. The best way to solve this common problem is to traverse the list the other way around, i.e., start with the last item.
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);
}
}
If you want to avoid looping over all the items and to only iterate where you want to insert items, you have to figure out the last item where you want to insert:
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);
}
Upvotes: 1