2017-11-14 16 views
-3

私はかなり新しいjavaですが、私はいくつかのデータを抽出する必要があるプロジェクトで作業中に、私は他のものとのループから抜け出す各結果を比較する必要があります。forループでの比較

forloop SQLクエリ& forloopのコードのうちの結果を得ることにある次の通りである:ループが2回実行したときのデータは、このから受け取っ

 for (Map<String, Object> row : results) { 
      String data= row.get("getdata").toString(); 
      } 

幾分似ている。

a12:1:123;b23:2:234;c24:3:344

a12:1:123;b23:2:234;c24:4:345

場合、そのための上記のデータに第一谷、":"後の第二の値が異なっている、私は第3の値を取得したい、例えばc24:3:344 & c24:4:345間に第2の値は、すなわち34異なっているので、私は344345を取得する必要があります。 同様に、私はforループで受け取った結果にそのようなデータを見つける必要があります。

あなたのお手伝いをさせていただき、ありがとうございます。

+1

私はコードを表示せずにバグについて質問しているので、私はこの質問をd​​ownvotedしました。具体的なコードがなければ、問題は何かを推測することしかできません。これはあなたや将来の読者には役に立たないものです。問題の[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を表示するために質問を編集することができれば、このdownvoteは取り消されるかもしれません。 –

答えて

0

少し砕いてください。

ループを使用すると、構造体を反復処理しているため、すべての行と前の行を比較する必要があります。各反復処理では、現在の行を取得して前の行と比較し、次の反復の前の行を現在の行に設定します。

prevRowData = null; 
for(Map<String, Object> row : results) { 
    String currRowData = row.get("getdata").toString(); 
    if(prevRowData != null) { 
     compareRows(currRowData, prevRowData); 
    } 
    prevRowData = currRowData; 
} 

private void compareRows(String currRowData, String prevRowData) { 
    // split the row data into an array on the colon/semi-colon delimiter 
    // to make it easier to compare each portion 
    String[] currRow = currRowData.split(":|;"); 
    String[] prevRow = prevRowData.split(":|;"); 

    // if the first part is equal and the second part is not equal 
    if(currRow[0].equals(prevRow[0] && !currRow[1].equals(prevRow[1])) { 
     // print out the third part of each row (or return it or whatever) 
     System.out.printf("currRow: %s, prevRow: %s", currRow[2], prevRow[2]); 
    } 
} 

これはかなり荒れていると、あなたは、いくつかの検証を行うと、あなたのニーズに合わせて調整する必要がありますが、私は基本的な考え方を示している願っています。

+0

ここでprevRowとcurrRowについて説明してください。prevRowDataの値はどこに保存しますか?これが愚かな質問であると申し訳ありません。 – andy

+0

ループが構造体に対して反復処理を行うため、currRowは現在の行です。これは、この繰り返しでマップから取り除いた行です。 'prevRow'は前回の繰り返しでマップから取り除いた行です。前の行を現在の行と比較できるように格納します。 – Matt

関連する問題