Java 保留不打印值

Java 保留不打印值,java,Java,嗨,我正在尝试从两个字符串列表中获取公共值。。。列表A有一个通过查询Excel数据库获得的值,列表B有一个通过查询SQL数据库获得的值。我想从A和B中获得公共值。为此,我使用了retainAll集合。但它并没有打印出共同的价值观,而是给了我[]。请帮我解决这个问题。如何获取除使用retainAll之外的通用值。请更正我的代码片段 //connecting excel database and storing its values Class.forName("sun.jd

嗨,我正在尝试从两个字符串列表中获取公共值。。。列表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);
//连接excel数据库并存储其值
forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
conn=DriverManager.getConnection(“jdbc:odbc:spreadsheetdb”,“”,“”);
out.println(“Excel数据库连接”+“
”; 语句stmt=conn.createStatement(); String excelquery=“从[Sheet1$]中选择*”; 结果集excelvalues=stmt.executeQuery(excelquery); 列表A=新的ArrayList(); while(excelvalues.next()){ A.add(excelvalues.getString(“name”);} //连接sql数据库并存储其值 forName(“sun.jdbc.odbc.JdbcOdbcDriver”); connection=DriverManager.getConnection(“jdbc:odbc:copyknowledgebase”、“sa”、“sqladmin”); out.println(“
”+“MSSQL已连接”+“
”) 语句Statement=connection.createStatement(); String conceptquery=“Select*from dbo.conc”; ResultSet conceptdetails=语句.executeQuery(conceptquery); Timestamp ts=new Timestamp(new java.util.Date().getTime()); 列表B=新的ArrayList(); while(conceptdetails.next()){ 添加(conceptdetails.getString(“Cname”); } B.保留(A); out.println(B);
这强烈表明列表中没有通用值
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);
}
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);
}
publicstaticvoidmain(字符串[]args)抛出DataException{
List all=新的ArrayList(Arrays.asList(1,2,3,4,5,6,7,8));
List偶数=数组.asList(2,4,6,8);
全部保留(偶数);
系统输出打印项次(全部);
}
…打印[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);
  all.retainAll(even);
  System.out.println(all);
}
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);
}
publicstaticvoidmain(字符串[]args)抛出DataException{
List all=新的ArrayList(Arrays.asList(1,2,3,4,5,6,7,8));
List偶数=数组.asList(2,4,6,8);
列表公用=新的ArrayList(全部);
for(整数i:全部){
如果(!偶数.包含(i)){
普通。删除(i);
}
}
System.out.println(通用);
}
…再次打印[2,4,6,8]


(实际上,这与
AbstractCollection
执行
retainAll()
的方式非常相似,只是它对每个
循环使用
迭代器而不是
,因此它可以在运行时修改集合,而不必创建副本。)

在调用Retainal之前,您是否确定列表中包含了所需的数据。如果您事先打印出它们的值,会发生什么情况。是的,我从这两个列表中都有相同的元素。如果Retainal有助于查找集合的相同元素,我就不是舒尔。例如,如果列表A={A,b,b,c}和b={A,A,b,d}A.retainAll(b)={A,b,b},但b内部只有一个'b'。RetainAll只删除不在其他集合中的元素。