2017-02-22 5 views
0

サーバArrayListとローカルDB ArrayListの間でArrayList値を比較しようとしています。ここでは、各ArrayListオブジェクトのIDをServerとローカルDBのArrayListから比較し、その新しいデータがDB ArrayListに格納されています。サーバからの2つのArrayListとローカルのDbからの2つのArrayListを比較しているときに、Infiniteループのエラーが発生しました

以下は私のコードです。

if(!listServer.isEmpty()){ 
    for(Model server:listServer){ 
     for(Model Db:listDb){ 
      while(!listServer.get(i).getid().equals(listDb.get(i).getid())){ 
        storeIntoDb.add(listServer.get(i)); 
      } 
     } 
    } 
} 

新しいリストに無限ループが発生し、ローカルDBに格納する必要がありました。実際に私が望むのは、サーバーに新しいデータがあるかどうかを比較し、それをローカルDBに格納することです。

+0

これを行うことで実際に何を達成したいですか? – Avi

+0

すべてのオブジェクトはサーバーから同じ順序で入っていますが、新しいレコードがなくてもデータは変更されますか? – Avi

+0

サーバーから新しいレコードがあります。だから私は同じ手段が新しいデータでない場合は、サーバーとDBの間のデータを比較する必要があり、新しいレコードがlocalDBに格納されます。 –

答えて

0

はこれを試してみてください。

+0

こんにちは、私は同じ新しい値とループをそれぞれ5回取得しています。私は、サーバーとデータの比較が1つではなく1つではないためだと思いますか?私はその後、唯一の方法は問題を解決できると思います。サーバーからの最初のデータはすべてのDbデータをループし、DBにのみ格納します。 –

+0

各サーバー項目はdb内の各項目と比較されます(一致する場合を除く)。 – Jagroshan

+0

こんにちは、私は問題がlistServer重複値が表示されることがわかりました。あなたの方法は仕事と問題解決です。 –

0

はこれを試してみてください。これはあなたがやりたいだろう、しかし、あなたのデータベースが成長した後に、このアプローチは、パフォーマンスの問題につながる

for(Model server:listServer){ 
    boolean inDb = false; 
    for(Model db:listDb){ 
    if(server.getId().equals(db.getId()) { 
     inDb = true; 
     break; 
    } 
    } 
    if(!inDb) { 
     storeIntoDb.add(server); 
    } 
} 

if(!listServer.isEmpty()){ 
for(Model server:listServer){ 
    for(Model db:listDb){ 
     if(!server.getid().equals(db.getid())){ 
       toreIntoDb.add(server); 
       } 
      } 
      } 
     } 
+0

こんにちは、結果は同じです、無限ループを再び取得します。 –

関連する問題