Android过滤对象列表

Jam*_*vec 3 java android list filter

我的问题类似于:java筛选对象列表的最佳方法

我有一个说“销售”的对象列表。我只想要其产品与另一个列表(例如saleProductList)中的对象相匹配的Sales对象。

除了循环之外,还有没有更好的方法可以做到这一点。

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

An-*_*oid 5

如果您的目标是在简单约束上过滤列表(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;
}
Run Code Online (Sandbox Code Playgroud)

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

_yourAdapter.getFilter().filter(String yourConstraintString);
Run Code Online (Sandbox Code Playgroud)

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

希望能帮助到你


小智 5

    mFinalList will contain filtered data.

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


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

               }

        }
Run Code Online (Sandbox Code Playgroud)