2012-05-22 9 views
0

안녕하세요 두 문자열 목록에서 공통 값을 가져 오려고합니다 ... 목록 A는 Excel 데이터베이스를 쿼리하여 얻은 값을 가지며 목록 B는 SQL 데이터베이스를 쿼리하여 가져온 값을 갖습니다. 나는 retainAll 컬렉션을 사용하기 위해 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); 
+0

확실히 당신을 당신이 있습니까 목록에는 retainAll을 호출하기 전에 예상하는 데이터. 직접 값을 인쇄하면 어떻게됩니까? – n00begon

+0

예 두 목록의 공통된 요소가 있습니다. – user1193904

+0

retainAll이 콜렉션의 공통 요소를 찾는 데 유익한 경우 나는 신중하지 않다. 예를 들어리스트 A가 {a, b, b, c}이고 B가 {a, b, d} 인 경우 A.retainAll (B) = {a, b, b} . RetainAll은 다른 콜렉션에없는 요소 만 제거합니다. – Pshemo

답변

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] 즉 공통 값을 인쇄합니다.

안부 altenatives으로

, 당신이 할 수있는 많은 방법이있다 - 여기에 하나의 예이다 : 다시 [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); 
} 

... 그것은 for each 루프보다는 Iterator를 사용하고 오히려 복사본을 생성하는 것보다,가는대로 따라서 컬렉션을 수정할 수있는 것을 제외하고, 즉, AbstractCollectionretainAll()을 수행하는 방식과 매우 유사합니다.)

관련 문제