Android 我想为搜索创建一个过滤器,如何在不涉及大量switch case语句的情况下做到这一点?

Android 我想为搜索创建一个过滤器,如何在不涉及大量switch case语句的情况下做到这一点?,android,refactoring,switch-statement,Android,Refactoring,Switch Statement,正如标题所说,我得到了一个列表,其中有7个选项,我想使用一个过滤器 如果我想把所有这些选项都放在一个案例中,它需要,让我看看7*6*5*4*3*2*1意味着5040个可能性。对吧? 那么,我怎样才能使它不是这么大的转换语句呢 我在谷歌上四处寻找,但找不到任何解决办法。 例如:,您希望将每个选项依次应用于您得到的筛选列表。 因此,如果启用了第一个选项,则获取一个已被选项1过滤的新列表。 然后,如果第二个选项处于启用状态,则使用选项2从选项1筛选筛选出的列表。等等等等 您将得到7个“如果”(每个选项

正如标题所说,我得到了一个列表,其中有7个选项,我想使用一个过滤器

如果我想把所有这些选项都放在一个案例中,它需要,让我看看7*6*5*4*3*2*1意味着5040个可能性。对吧?

那么,我怎样才能使它不是这么大的转换语句呢

我在谷歌上四处寻找,但找不到任何解决办法。
例如:,

您希望将每个选项依次应用于您得到的筛选列表。 因此,如果启用了第一个选项,则获取一个已被选项1过滤的新列表。 然后,如果第二个选项处于启用状态,则使用选项2从选项1筛选筛选出的列表。等等等等


您将得到7个“如果”(每个选项1个),您应该继续筛选返回的列表。

不必为每个选项创建切换语句,您只需检查第一个选项(如果不符合要求),无需检查其他选项。 类似地,如果第一个选项已满,则不会检查第一个选项,如果第二个选项未满,则转到第二个选项,然后无需检查其余选项,依此类推……

尝试以下方法: 扩展可过滤性:

  @Override
public Filter getFilter() {

    Filter filter = new Filter() {

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {

            modelValues = (ArrayList<String>) results.values; // has

            notifyDataSetChanged();
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();
            List<Model> FilteredArrList = new ArrayList<Model>();

            if (mOriginalValues == null) {
                mOriginalValues = new ArrayList<Model>(modelValues); // saves

            }

            /********
             * 
             * If constraint(CharSequence that is received) is null returns
             * the mOriginalValues(Original) values else does the Filtering
             * and returns FilteredArrList(Filtered)
             * 
             ********/
            if (constraint == null || constraint.length() == 0) {

                // set the Original result to return
                results.count = mOriginalValues.size();
                results.values = mOriginalValues;
            } else {
                Locale locale = Locale.getDefault();
                constraint = constraint.toString().toLowerCase(locale);
                for (String model : mOriginalValues) {


                    String data =model;
                    if (data.toLowerCase(locale).contains("7".toString())||data.toLowerCase(locale).contains("6".toString())||data.toLowerCase(locale).contains("5".toString())||data.toLowerCase(locale).contains("4".toString())) {

                        FilteredArrList.add(modelMyMall);
                    }
                }
                // set the Filtered result to return
                results.count = FilteredArrList.size();
                results.values = FilteredArrList;

            }
            return results;
        }
    };
    return filter;
}
@覆盖
公共过滤器getFilter(){
过滤器过滤器=新过滤器(){
@抑制警告(“未选中”)
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
modelValues=(ArrayList)results.values;//具有
notifyDataSetChanged();
}
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults results=新的FilterResults();
List FilteredArrList=新建ArrayList();
if(mOriginalValues==null){
mOriginalValues=新的ArrayList(modelValues);//保存
}
/********
* 
*如果约束(接收到的CharSequence)为null,则返回
*mOriginalValues(原始)值将执行过滤
*并返回FilterDarrList(已过滤)
* 
********/
if(constraint==null | | constraint.length()==0){
//将原始结果设置为return
results.count=mOriginalValues.size();
结果.值=mOriginalValues;
}否则{
Locale=Locale.getDefault();
constraint=constraint.toString().toLowerCase(区域设置);
for(字符串模型:mOriginalValues){
字符串数据=模型;
if(data.toLowerCase(locale).contains(“7.toString())|| data.toLowerCase(locale).contains(“6.toString())|| data.toLowerCase(locale).contains(“5.toString())| data.toLowerCase(locale).contains(“4.toString())){
添加(modelMyMall);
}
}
//将筛选结果设置为返回
results.count=filterDarrList.size();
results.values=FilteredArrList;
}
返回结果;
}
};
回流过滤器;
}
使用以下方法:

 List<String> list = new ArrayList<String>(Arrays.asList(new String[] 
                              {"7", "6","3", "5"})); //7*6*5*$*3*2*1
       System.out.println("List Before: " + list);
    for (Iterator<String> it=list.iterator(); it.hasNext();) {
if (!it.next().contains("How"))
    it.remove(); // NOTE: Iterator's remove method, not ArrayList's, is used.
  }
    System.out.println("List After: " + list);
List List=new ArrayList(Arrays.asList(new String[]
{"7", "6","3", "5"})); //7*6*5*$*3*2*1
System.out.println(“前面的列表:+列表”);
for(Iterator it=list.Iterator();it.hasNext();){
如果(!it.next().包含(“如何”))
it.remove();//注意:使用的是迭代器的remove方法,而不是ArrayList的。
}
System.out.println(“列表在“+列表之后”);

我会将所有数据放在SQLite数据库中,并使用
where
子句。你能用它添加一些解释吗,因为我不明白它的作用。这看起来很简单。。。我可能会尝试一下(ty:)这不起作用,因为有更多选项可用作过滤器。