我想为搜索创建一个过滤器,我怎么能这样做,不涉及一个巨大的switch case语句?

时间:2013-10-25 11:48:45

标签: android refactoring switch-statement

就像标题所说的那样,我得到了一些我希望使用带有7个选项的过滤器的列表。

如果我想将所有这些选项放在一个案例中,我会看到7 * 6 * 5 * 4 * 3 * 2 * 1意味着5040个可能性。正确?

那么我怎么能这样做呢,这不是一个很大的转换声明?

我在google上看了很多但是找不到任何解决方案。 例如:android multiple options caseandroid filter search listview

4 个答案:

答案 0 :(得分:1)

您希望依次将每个选项应用于您获得的过滤列表。 因此,如果启用第一个选项,请获取已通过选项1过滤的新列表。 然后,如果启用了第二个选项,则使用选项2过滤选项1中的已过滤列表。依此类推。

你最终会得到7个ifs(每个选项1个),你应该继续过滤你得到的列表。

答案 1 :(得分:0)

不是为每个选项创建一个switch语句,而是只检查第一个选项,如果它没有达到标记,则不需要检查其他选项。 Simillarly如果第一个选项满足条件,它将不会检查您的第一个选项,如果没有满足条件,则转到第二个选项,然后无需检查其余选项等等...

答案 2 :(得分:0)

尝试这种方式:  扩展可过滤:

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

答案 3 :(得分:0)

使用这种方式:

 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);
相关问题