2016-11-09 10 views
-1

私は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++; 
    } 
} 

これは、必要に応じて動作するようには思えないを使用しています。どうすればこれを達成できますか?

+0

この「myNews.add(i、news);」を試してください。 –

答えて

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

へ読みやすくするために、新しいArrayListを使用することもできます。 既存の配列リストをループし、新しい4番目の要素の条件付きの新しいArrayListに要素を追加します。

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)); 
    } 
関連する問題