【问题标题】:Android Filtering a List of ObjectsAndroid过滤对象列表
【发布时间】:2013-04-10 09:50:32
【问题描述】:

我的问题类似于:java Best way to Filter list of object

我有一个对象列表,比如销售。我只想要销售对象 其产品与另一个列表中的产品相匹配,例如 saleProductList。

除了循环,还有更好的方法吗?

但是我希望能够使用 android 可访问的代码进行过滤,例如这些库需要在 android 操作系统上运行良好并在 android 操作系统上运行。我希望避免为我认为很常见的问题编写自制代码,有什么建议吗?

【问题讨论】:

  • 取决于您的问题的具体情况。你可能有一个数据库。在这种情况下,最好的方法是使用您的查询进行过滤。
  • 您的意思是在编码风格方面更好还是在效率方面更好?如果不检查所有产品,就无法知道一个产品是否与另一个匹配。
  • 搜索列表视图项?
  • @DeepakBala,我正在寻找类似的东西: newList = bigList.filter(clientName, "Bob");从本质上讲,类似于如何将 where 语句添加到查询中......如果没有简单的方法来做到这一点,我将更多地依赖 db,就像 njzk2 建议的那样。
  • @VenomFangs 编写一个 API 来做到这一点应该不复杂,但如果你有一个数据库,我仍然会这样做。第一次从数据库中获取正确的信息就可以节省 CPU 和内存。

标签: java android list filter


【解决方案1】:
    mFinalList will contain filtered data.

   List<Object> mFinalList=new ArrayList<>();


       for (Object person : listData) {
                if (person.getNameType().equalsIgnoreCase("somename")) {
                    mFinalList.add(person);
                } 

               }

        }

【讨论】:

  • 虽然这段代码可以回答这个问题,但最好包含一个解释,以便更容易理解。
  • 您需要在 if 语句中进行检查以防止可能出现的 NPE。
【解决方案2】:

如果您的目标是在一个简单的约束条件下过滤列表(List 或 ArrayList)并在 ListView 中显示数据,您可以直接使用界面中的 Filterable适配器如下:

public class AdapterFilterable extends BaseAdapter implements Filterable {

@Override
public Filter getFilter() {

    Filter filter = new Filter() {

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

            if (results != null && results.values != null) {

                _arrayList = (List<object>) results.values;
            }
            else {
                _arrayList = ApplicationGlobal._dataManager.get_ArraylistFull();
            }
            notifyDataSetChanged();
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {

            FilterResults results = new FilterResults();
            List<YourObject> filteredList = new ArrayList<YourObject>();

            //Do your filtering operation with the constraint String
            //Return result for publishResults to use it

            results.count = filteredList.size();
            results.values = filteredList;

            return results;
        }
    };
    return filter;
}

要使用过滤器,例如何时在列表中搜索或仅使用 约束 过滤它,您只需要:

_yourAdapter.getFilter().filter(String yourConstraintString);

否则,如果您想过滤复杂的数据,您当然可以简单地使用 For 循环进行过滤,然后执行 notifyDataChanged();

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2017-06-14
    • 2022-01-12
    • 2015-03-24
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多