首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >retainAll不打印值

retainAll不打印值
EN

Stack Overflow用户
提问于 2012-05-22 17:09:48
回答 1查看 178关注 0票数 0

您好,我正在尝试从两个字符串列表中获取通用值...列表A具有通过查询Excel数据库获得的值,列表B具有通过查询SQL数据库获得的值。我希望有来自A和B的公共值。为此,我使用了retainAll集合。但它没有打印出它给我的普通values.instead。请帮我解决这个问题。如何获得通用值,而不是使用retainAll。请更正我的代码片段。

代码语言:javascript
复制
      //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);
EN

回答 1

Stack Overflow用户

发布于 2012-05-22 18:00:08

这强烈地表明在您的列表AB中没有共同值。你有没有试过调试/单步执行来检查?

retainAll(collection)应该做你期望它做的事情。考虑下面这个简单的例子:

代码语言:javascript
复制
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);
}

...which打印2、4、6、8-即常用值。

关于修饰语,有很多方法可以做到这一点--这里有一个例子:

代码语言:javascript
复制
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);
}

...which再次打印2、4、6、8

(实际上,这与AbstractCollection执行retainAll()的方式非常相似,不同之处在于它使用Iterator而不是for each循环,因此它可以在执行过程中修改集合,而不必创建副本。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10699001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档