1

我有 String ArrayList 与结果集进行比较。

例如:ArrayList 元素

ITM001
ITM002
ITM003
ITM004

例如:结果集 1

ITM001
ITM002
ITM003
ITM004  

包含所有元素
返回 ArrayList Empty;

例如:结果集 2

ITM001
ITM002
ITM004  

缺少 ITM003
返回 ArrayList ITM003;

例如:结果集 3

ITM001
ITM002 

缺少 ITM003,ITM004
返回 ArrayList ITM003,ITM004;

如果Resultset 不包含Arraylist 的所有元素,则那些缺失的元素必须作为ArrayList 返回。否则返回空的 ArrayList。

这是我尝试过的。

public static ArrayList<String> checkStoreItems(String currentStore, ArrayList<String> stlist) throws ClassNotFoundException, SQLException {
        Connection conn = DBConnection.conn();
        String sql = "select itemId from Store_Items where storeID=(select storeID from StoreMain where locationName=?)";
        Object []values ={currentStore}; 
        ResultSet res = DBHandller.getData(sql, conn, values);
        ArrayList<String> storelist = new ArrayList<String>();
        while(res.next()){
              String item = res.getString("itemId");
              for (int i = 0; i < stlist.size(); i++) {
                    if (item.contains(stlist.get(i))) {
                          continue;     
                    }else{
                          storelist.add(item);
                    }
              }

        }

        return null;

  }
4

2 回答 2

5

如果我正确理解了你的问题,你可以尝试这样的事情:

    public static ArrayList<String> checkStoreItems(String currentStore, 
                       ArrayList<String> stlist) throws ClassNotFoundException, SQLException {
    Connection conn = DBConnection.conn();
    String sql = "select itemId from Store_Items where storeID=(select storeID from StoreMain where locationName=?)";
    Object []values = {currentStore}; 
    ResultSet res = DBHandller.getData(sql, conn, values);
    Set<String> storelist = new HashSet<String>();
    while(res.next()){
          String item = res.getString("itemId");
          storelist.add(item);
   }
    stlist.removeAll(storelist);
    return stlist;
 }
于 2013-04-12T16:16:54.790 回答
1

使用HashSet'removeAll方法执行操作。您首先需要将每个来源的元素放入HashSet.

这避免了在使其成为 O(n) 操作而不是 O(n^2)的过程中遍历整个ArrayList元素的需要。ResultSet

ArrayList<String> diffResultSet(Collection<String> coll, ResultSet resultSet, int column) {
    Set<String> collSet = new HashSet<String>(coll);
    Set<String> resultSetSet = new HashSet<String>();
    while (resultSet.next()) {
        resultSetSet.add(resultSet.getString(column));
    }
    collSet.removeAll(resultSetSet);
    return new ArrayList<String>(collSet);
}
于 2013-04-12T16:14:41.487 回答