2016-11-09 3 views
-1

Ich versuche, ein Element zu ArrayList nach jeweils 4 Elementen hinzuzufügen.Artikel zu Arraylist in bestimmten Intervall hinzufügen

ArrayList danach sollte wie,

Artikel | Artikel | Artikel | Artikel | neues_element | item | item | item | item | NEW_ITEM | Artikel ...

So verwende ich den 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++; 
    } 
} 

Dies scheint nicht wie gewünscht zu arbeiten. Wie würde ich das erreichen?

+0

Versuchen Sie diese 'myNews.add (i, Nachrichten);' –

Antwort

1

Das Problem ist, dass Ihr Index durch Einfügen von Elementen durcheinander gebracht wird. Der beste Weg, dieses allgemeine Problem zu lösen, besteht darin, die Liste anders herum zu durchlaufen, d. H. Mit dem letzten Element zu beginnen.

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

Wenn Sie alle vermeiden wollen Looping über die Elemente und nur wiederholen, wo Sie Elemente einfügen möchten, müssen Sie das letzte Element herausfinden, wo Sie einfügen möchten:

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

zu Um es lesbarer zu machen, können Sie auch versuchen, eine neue ArrayList zu verwenden. Schleife durch eine vorhandene Array-Liste und Elemente zu neuen ArrayList mit einer Bedingung jedes 4. Element hinzufügen ist neu.

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