0

嗨,我正在尝试从两个字符串列表中获取公共值...列表 A 具有通过查询 Excel 数据库获得的值,而列表 B 具有通过查询 SQL 数据库获得的值。我想从 A 和 B 中获得共同的值。为此我使用了 retainAll 集合。但它没有打印共同的价值观。而是给了我[]。请帮我解决这个问题。除了使用retainAll之外,如何获得共同值。请更正我的代码片段。

      //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

这强烈表明您的列表AB. 您是否尝试过调试/单步检查?

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 回答