8

私の質問は次のようなものです: java オブジェクトのリストをフィルタリングする最良の方法

Sales というオブジェクトのリストがあります。Product が別のリスト (saleProductList など) のものと一致する Sales オブジェクトのみが必要です。

ループ以外に、それを行うためのより良い方法はありますか。

ただし、Android にアクセス可能なコードでフィルタリングを実行できるようにしたいと考えています。たとえば、ライブラリは Android OS で適切に動作し、Android OS 上で実行する必要があります。私は、よくあると思われる問題に対して自家製のコードを作成することを避けたいと思っています。何か提案はありますか?

4

2 に答える 2

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

フィルターを使用するには、リストを検索するときや、必要な制約でフィルターするときのように:

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

それ以外の場合は、複雑なデータをフィルター処理する場合は、For ループで単純にフィルター処理してから、notifyDataChanged();を実行できます。

それが役に立てば幸い

于 2013-07-01T09:10:47.477 に答える