Java Map compute () Пример для Java 1.6 - PullRequest
0 голосов
/ 20 февраля 2020

Я должен работать на Java 1.6. Мне трудно преобразовать следующий код, работающий на Java 1.8.

Map<String, Double> maksimum = new HashMap<>();
List<Record> records;
for (Record record : records) {
    record.getFeatures().forEach((key, value) -> {
        maksimum.compute(key, (k1, max) -> max == null || value > max ? value : max);
    });
}

, и преобразовать его следующим образом. Интересно, где я делаю не так.

for(Record rec : records) {
    for (Map.Entry<String, Double> entry : rec.getFeatures().entrySet()) {
        if (entry.getKey()==null || maksimum.containsKey(entry.getKey())) {
            maksimum.replace(entry.getKey(), maksimum.get(entry.getValue()));
        }   
    }
}

1 Ответ

1 голос
/ 20 февраля 2020

Если я правильно понимаю ваш исходный код в Java 8, вы хотите сохранить максимальное значение для каждого ключа в вашем Map. Вот код, который должен сделать это в Java 6:

Map<String, Double> maksimum = new HashMap<String, Double>();

for (Record record : records) {
    for (Map.Entry<String, Double> recordEntry : record.getFeatures().entrySet()) {
        String key = recordEntry.getKey();
        Double value = recordEntry.getValue();

        Double initialValue = maksimum.get(key);
        if (initialValue == null) {
            maksimum.put(key, value);
        } else {
            maksimum.put(key, Math.max(value, initialValue));
        }
    }
}

Обратите внимание, что функция replace, которую вы использовали в своем примере, была представлена ​​в Java 8. Документы: https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#replace -KV-

...