【问题标题】:Compare content of the ArrayList against Resultset将 ArrayList 的内容与结果集进行比较
【发布时间】:2013-04-05 05:44:21
【问题描述】:

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

例如:ArrayList 元素

ITM001
ITM002
ITM003
ITM004

例如:结果集 1

ITM001
ITM002
ITM003
ITM004  

包含所有元素
返回 ArrayList 空;

例如:结果集 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;

  }

【问题讨论】:

  • 对我们来说确切的问题是什么?
  • stlist 来自哪里?
  • 我想将 Arraylist 的内容与 ResultsSet 进行比较。如果结果集不包含 Arraylist 的任何元素,则那些缺失的元素必须作为 Arraylist 返回。我该怎么做。
  • stlist 是什么?为什么不使用list.contains() 而不是循环?
  • 更新了原始代码。 stlist 是一个方法参数。带有字符串元素的数组列表。

标签: java arraylist compare resultset


【解决方案1】:

如果我正确理解了您的问题,您可以尝试以下方法:

    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;
 }

【讨论】:

  • 非常感谢您的回复。但在这里我想做的是,ArrayList 与Resultset 进行比较,并将arraylist 的那些缺失元素添加到新的arraylist(storelist) 中。但是这里给出了结果集中缺少的元素。
  • 哇。这正是我正在寻找的。很多。有用。感谢您的帮助。
【解决方案2】:

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

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

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);
}

【讨论】:

  • 非常感谢您的解决方案。以前从未尝试过这样的事情。我会尝试一下并告诉你。
猜你喜欢
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
相关资源
最近更新 更多