0

ユーザーの好みに応じて、配列リストのオブジェクト値を比較し、最大値を取得したいと思います。私の最初のアプローチは、オブジェクトプロパティの関数を定義し、配列リストを反復処理することでした。

    private MyModel getMaxValueA(ArrayList<MyModel> myModelList) {
    MyModel res = null;
    for (MyModel myModel : myModelList) {
        if (myModel != null) {
            if (myModel.valueA() > res.valueA()) {
                res = myModel;
            }
        } else {
            res = myModel;
        }
    }
    return res;
}

問題は、比較したい4つの異なる値があり、4つの同様の関数を定義するのは正しくないように思われるため、すべての機能を組み合わせてスイッチ/ケースを追加してみました

    private MyModel getMaxValueA(ArrayList<MyModel> myModelList, Setting mySetting) {
    MyModel res = null;
    for (MyModel myModel : myModelList) {
        if (myModel != null) {
            switch (mySetting) {
            case settingA:
                if (myModel.valueA() > res.valueA()) {
                     res = myModel;
                    }
                break;
            case settingB:
                if (myModel.valueB() > res.valueB()) {
                     res = myModel;
                    }

                break;
            ........
        } else {
            res = myModel;
        }
    }
    return res;
}

これは少し短く、4つの機能ではなく1つだけですが、私も幸せではありません。それを改善するためのアイデアはありますか?

ありがとう。

4

2 に答える 2

0

コンパレータを実装する

 class MyComparator extends Comparator<MyModel> {
     Setting s;
     MyComparator(Setting s ){
        this.setting=s;
     } 
     public int compare(MyModel model, MyModel model2) {
        //do the comparison utilizing setting

     }

別の回答を見て編集しました:次にCollections.max(listToBeSorted, new MyComparator(setting))、最大値を取得するために使用します

于 2013-01-03T11:09:33.697 に答える