2013-10-12 90 views
4

有沒有一種簡單的方法可以從對象的數組列表中的對象的一個​​字段中獲取最大值?Java - 從對象的數組列表中獲取最大值?

例如,出於以下目的,我希望獲得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。

任何幫助表示讚賞。謝謝!

回答

10

使用ComparatorCollections.max()來讓它知道哪個比較大。


請參見

+0

甜耶穌的像這樣的東西相比,蟒蛇,C++,C#也只是博格爾斯我的腦海裏。 Java確實需要一些語法更新。 –

+0

@Kevin它已經得到了語言語法,用Java 8你可以用lamda做到這一點 –

0

你應該遍歷比較/查找最大值O(N)列表。如果您需要這樣做,請經常用PriorityQueueO(1)替換列表以找到最大值。

3

這已經被多次回答了,但是因爲它是google的第一個結果,所以我會給出一個Java 8的例子。

看看stream功能。然後你可以得到這樣的對象列表的最大形式:

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

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

順便說一句,在你的例子中,屬性應該是私人的。然後你可以用一個吸氣器來訪問它們。

0

與Java 8,你可以用它一起使用stream()預定義max()功能和Comparator.comparing()功能與lambda表達式:

ValuePairs maxValue = values.stream().max(Comparator.comparing(v -> v.getMValue())).get(); 
相關問題