2011-10-06 65 views
4

我有一張如下所示的映射。我想要做的是獲得最小浮點值和相應的鍵。此外,浮點值類似於例如3127668.8或1.786453E7等等。我怎樣才能做到這一點?如何從哈希映射中獲取最低浮點值

Map<String, Float> distance = new HashMap<String, Float>(); 

回答

8
String str; 
Float min =Float.valueOf(Float.POSITIVE_INFINITY); 
for(Map.Entry<String,Float> e:distance.entrySet()){ 
    if(min.compareTo(e.getValue())>0){ 
     str=e.getKey(); 
     min=e.getValue(); 
    } 
} 
+1

這是您會找到的最佳解決方案。漂亮的java代碼! – SHiRKiT

+0

@SHiRKiT無需重新設計即可獲得最好的效果 –

+0

我只會將min的默認值更改爲「Float.MAX_VALUE」,但僅僅是因爲我不知道「Float.POSITIVE_INFINITY」的用途和值。 – SHiRKiT

1

遍歷條目,做一個比較。

另外,使用包裝的類,它在項條目比較,以避免重複,或地圖的實現,它的排序/排序基於武斷的標準,等等

1

試試這個:

String minKey = null; 
Float minValue = Float.MAX_VALUE; 
for (Map.Entry<String, Float> entry : distance.entrySet()) { 
    Float value = entry.getValue(); 
    if (value < minValue) { 
     minKey = entry.getKey(); 
     minValue = value; 
    } 
} 
0

您可以迭代地圖的條目集,即distance.entrySet(),它是Map.Entry對象的集合,基本上是一個鍵/值對。事情是這樣的:

Map.Entry<String,Float> minEntry; 
for(entry : distance.entrySet()) { 
    if(minEntry == null) { 
     minEntry = entry; 
     continue; 
    } 
    if(minEntry.getValue() > entry.getValue()) { 
     minEntry = entry; 
    } 
} 
4

一個行代碼:

Float min = Collections.min(distance.values()); 

這很容易通過JDK庫維護。