0

こんにちは、2 つの文字列リストから共通の値を取得しようとしています... リスト A には Excel データベースにクエリを実行して取得した値があり、リスト B には SQL データベースにクエリを実行して取得した値があります。A と B の共通の値が必要です。そのために、retainAll コレクションを使用しました。しかし、それは共通の値を出力していません.代わりに私に[]を与えています. この問題を解決するのを手伝ってください。keepAll を使用する以外の一般的な値を取得する方法。私のコードスニペットを修正してください。

      //connecting excel database and storing its values
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      conn=DriverManager.getConnection("jdbc:odbc:spreadsheetdb","","");
      out.println("Excel Database connected" +"<br>");

      Statement stmt=conn.createStatement();
      String excelquery="Select * from [Sheet1$]";
      ResultSet excelvalues= stmt.executeQuery(excelquery);

      List A= new  ArrayList();
      while(excelvalues.next()){
            A.add(excelvalues.getString("name"));}

   //connection sql Db and storing its values

   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
   connection = DriverManager.getConnection("jdbc:odbc:copyknowledgebase","sa","sqladmin");
   out.println("<br>"+"MSSQL connected " +"<br>")

   Statement statement=connection.createStatement();
   String conceptquery="Select * from dbo.conc";
   ResultSet conceptdetails=statement.executeQuery(conceptquery);
   Timestamp ts = new Timestamp(new java.util.Date().getTime());

  List B = new  ArrayList();
  while(conceptdetails.next()){
  B.add(conceptdetails.getString("Cname"));
  }
  B.retainAll (A);
  out.println(B);
4

1 に答える 1

0

Aこれは、リストとに共通の値がないことを強く示唆していますB。チェックするためにデバッグ/シングルステップスルーを試みましたか?

retainAll(collection)あなたが期待することをするべきです。次の簡単な例を考えてみましょう。

public static void main(String[] args) throws DataException {
  List<Integer> all = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6,7,8));
  List<Integer> even = Arrays.asList(2,4,6,8);
  all.retainAll(even);
  System.out.println(all);
}

... [2, 4, 6, 8] を出力します。つまり、共通の値です。

代替手段に関しては、これを行う方法はたくさんあります - 以下にその一例を示します。

public static void main(String[] args) throws DataException {
  List<Integer> all = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6,7,8));
  List<Integer> even = Arrays.asList(2,4,6,8);

  List<Integer> common = new ArrayList<Integer>(all);
  for (Integer i : all){
    if (!even.contains(i)){
      common.remove(i);
    }
  }
  System.out.println(common);
}

...これも [2, 4, 6, 8] を出力します

(実際には、これは が行う方法と非常によく似ていAbstractCollectionますが、ループではなくをretainAll()使用するため、コピーを作成するのではなく、進行中にコレクションを変更できます。)Iteratorfor each

于 2012-05-22T10:00:07.987 に答える