как получить наименьшее значение с плавающей точкой из хэш-карты - PullRequest
4 голосов
/ 07 октября 2011

У меня есть карта, которая выглядит как ниже. Я хочу получить минимальное значение с плавающей запятой и соответствующий ему ключ. Также значения с плавающей запятой такие же, как, например, 3127668,8 или 1,786453E7 и так далее, и так далее. Как мне этого добиться?

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

Ответы [ 5 ]

8 голосов
/ 07 октября 2011
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();
    }
}
4 голосов
/ 07 октября 2011

Одна строка кода:

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

Это легко поддерживается библиотекой JDK.

1 голос
/ 07 октября 2011

попробуйте это:

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;
    }
}
1 голос
/ 07 октября 2011

Перебирайте записи и проводите сравнение.

В качестве альтернативы используйте класс-оболочку, который выполняет сравнение для записи элемента, чтобы избежать итерации, или реализацию карты, которая выполняет сортировку / упорядочение на основе произвольных критериев,и т.д.

0 голосов
/ 07 октября 2011

Вы можете перебрать набор записей карты, то есть 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;
    }
}
...