【问题标题】:How to filter two words from different array如何从不同的数组中过滤两个单词
【发布时间】:2017-04-16 05:27:07
【问题描述】:

我有一个自定义过滤器。

public void filter(String filter) {
        Restau.clear();
        if (filter != null && filter.trim().length() > 0) {
            for (restauInfoDB element : tempRestList) {
                if ( element.getOh().toLowerCase().contains(filter) ||element.getCost().toLowerCase().contains(filter) ||  element.getResname().toLowerCase().contains(filter) || element.getType().toLowerCase().contains(filter) || element.getResloc().toLowerCase().contains(filter))
                    Restau.add(element);
            }
        } else {
            Restau.addAll(tempRestList);
        }
        super.notifyDataSetChanged();
    }

该自定义过滤器仅过滤一个元素。例如,我搜索“汉堡”它只会过滤一个元素。例如,我想过滤 2 个或更多单词 “Burger Samsung”我想过滤每个有“burger”和“samsung”的元素

Restau.add(element); 是我在CustomListView中过滤列表的代码

【问题讨论】:

  • 如果您希望您的过滤器方法能够过滤多个单词,那么您可能应该将其更改为可以将多个字符串传递给该方法。 public void filter(String... filter)
  • @911DidBush 你是什么意思传递多个字符串???
  • @Lemme 您希望您的过滤器方法能够过滤多个单词,但它只接受一个字符串作为参数。如果它接受多个字符串(即单词)会更有意义。这样您就不必在方法内拆分过滤器字符串。或者过滤器方法是一个被覆盖的方法,你不能改变签名?

标签: java android filtering


【解决方案1】:

您可以使用列表尝试以下操作:

public void filter(List<String> filters) {
    Restau.clear();
    if (!filters.isEmpty())
    {
        for (restauInfoDB element : tempRestList) {
            // Stuff the content into an array
            List<String> contents = new ArrayList<>();
            contents.add(element.getOh().toLowerCase());
            contents.add(element.getCost().toLowerCase());
            etc...

            boolean matchAll = true;
            for(String filter : filters) {
                boolean matchFilter = false;
                for(String content : contents) {
                    if (content.contains(filter)) {
                        matchFilter = true;
                        break;
                    }
                }
                // If this filter was not found, then set matchAll to false
                if (!matchFilter) {
                    matchAll = false;
                    break;
                }
            }
            if (matchAll)
                Restau.add(element);
        }
    } else {
        Restau.addAll(tempRestList);
    }
    super.notifyDataSetChanged();
}

【讨论】:

  • 调用adapter.filter(text); 时出错,无法应用于(java.lang.String)
  • 嗯,这是因为这个版本接受一个字符串列表。您可以将其更改为接受字符串数组,或者执行@911DidBush 建议使用可变参数“字符串...过滤器”
  • 很抱歉是个新手,但是。我应该更改哪些特定代码?
猜你喜欢
  • 2014-08-26
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
相关资源
最近更新 更多