通过 ArrayList 搜索时的错误

Bugs When Searching Through ArrayList

我有一个对象的 ArrayList。每当用户输入 searchView 时,我都会使用此方法,这就是 filterBy。变量 byName 是一个布尔值,用于确定我们是按名称搜索还是按代码搜索。我的错误是:

  1. 我正在使用关键字 "alfalfa" 对其进行测试,但每次输入字母时它都会 returns 额外的项目(我通过对数据库本身执行相同的操作来进行检查)。
  2. 如果我在 searchView 中有文本时单击开关(更改 byName 布尔值),它将继续删除项目,直到什么都没有为止。
  3. 删除 searchView 中的文本也会继续删除文本(这让我感到困惑,因为它要从中删除项目的列表只会在此方法中设置)。

想知道是什么原因造成的吗?

private void displayProducts() {
    final Querier querier = new Querier(this);
    ProductListAdapter productListAdapter;

    if (filterBy.equals("")) {
        products = querier.getProductsListing();

        productListAdapter = new ProductListAdapter(this, products.getProductsList(), byName);
    } else {
        Products ps = products;

        for (int i = 0; i < products.getProductsList().size(); i++) {
            final Product prod = ps.getProductsList().get(i);

            if (byName) {
                if (!prod.getProductName().toLowerCase().contains(filterBy))
                    ps.getProductsList().remove(prod);

            } else if (!prod.getOrderCode().toLowerCase().contains(filterBy))
                ps.getProductsList().remove(prod);
        }

        Log.v("removed some junk, now there are", String.valueOf(ps.getProductsList().size()));

        productListAdapter = new ProductListAdapter(this, ps.getProductsList(), byName);
    }

    productsLinearLayout.setAdapter(productListAdapter);
}

如果这对后续的其他人有帮助,请按以下方式解决。

private void displayProducts() {
    final Querier querier = new Querier(this);
    ProductListAdapter productListAdapter;
    products = querier.getProductsListing();

    if (filterBy.equals(""))
        productListAdapter = new ProductListAdapter(this, products.getProductsList(), byName);
    else {
        ArrayList<Product> ps = new ArrayList<>(products.getProductsList());

        for (Product p : products.getProductsList()) {
            if (byName) {
                if (!p.getProductName().toLowerCase().contains(filterBy))
                    ps.remove(p);

            } else {
                if (!p.getOrderCode().toLowerCase().contains(filterBy))
                    ps.remove(p);
            }
        }

        Log.v("removed some junk, now there are", String.valueOf(ps.size()));

        productListAdapter = new ProductListAdapter(this, ps, byName);
    }

    productsLinearLayout.setAdapter(productListAdapter);
}