如何过滤不同数组中的两个单词

时间:2016-12-01 14:17:45

标签: java android filtering

我有自定义过滤器。

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个或更多单词,例如 “汉堡三星”我想过滤每一个有“汉堡”和“三星”的元素

Restau.add(element); 是CustomListView

中我过滤列表的代码

1 个答案:

答案 0 :(得分:0)

您可以使用列表尝试以下内容:

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