16

オブジェクトの配列リスト内のオブジェクトの 1 つのフィールドから最大値を取得する簡単な方法はありますか? たとえば、次のオブジェクトから、Value フィールドの最高値を取得したいと考えていました。

例 arraylist ValuePairs.mValue の最大値を取得します。

ArrayList<ValuePairs> ourValues = new ArrayList<>();
outValues.add(new ValuePairs("descr1", 20.00));
outValues.add(new ValuePairs("descr2", 40.00));
outValues.add(new ValuePairs("descr3", 50.00));

arraylist に格納されたオブジェクトを作成するクラス:

public class ValuePairs {

    public String mDescr;
    public double mValue;

    public ValuePairs(String strDescr, double dValue) {
        this.mDescr = strDescr;
        this.mValue = dValue;
    }
}

次のようなことを行って mValue の最大値を取得しようとしています (これは間違っていることがわかっています)。

double dMax = Collections.max(ourValues.dValue);

dMax は 50.00 である必要があります。

4

5 に答える 5

22

Comparatorwithを使用しCollections.max()て、比較してどちらが大きいかを知らせます。


こちらもご覧ください

于 2013-10-12T20:09:13.407 に答える
9

これはすでに複数回回答されていますが、Googleでの最初の結果であるため、例を挙げてJava 8の回答を提供します。

ストリーム機能を見てみましょう。次に、次のようなオブジェクトのリストの最大形式を取得できます。

List<ValuePairs> ourValues = new ArrayList<>();

ourValues.stream().max(comparing(ValuePairs::getMValue)).get()

ちなみに、あなたの例では、属性は非公開にする必要があります。その後、ゲッターを使用してそれらにアクセスできます。

于 2015-12-20T13:47:05.183 に答える
1

最大値を比較/検索するリストを反復処理する必要がありますO(N)。これを行う必要がある場合は、リストをPriorityQueue O(1)に置き換えて最大値を見つけることがよくあります。

于 2013-10-12T20:09:22.897 に答える