Как я могу найти наибольшее значение только определенных записей в моей HashMap, а не во всей HashMap? - PullRequest
1 голос
/ 15 марта 2020

У меня есть HashMap (называемый QTable) типа (String, Double), и я хотел бы создать метод, который с определенным ключом String будет возвращать максимальное значение Double из 2-4 других записей в HashMap.

Записи выглядят примерно как <"Q04", например, 0.0>.

В случае, если задан ключ "Q04", я бы хотел, чтобы метод возвращал максимальное значение Double записей с ключами "Q40", "Q43" и "Q45" Я предполагаю, что это будет что-то вроде:

if (if x == QTable.get("Q04")) {
        return QTable.get.maxValue("Q40", "Q43", "Q45") }

Ненужная справочная информация: я пытаюсь кодировать уравнение Беллмана, чтобы заполнить из таблицы Q, и этот шаг будет использоваться для определения максимального значения Q потенциальных перемещений по прибытии в новое состояние.

Ответы [ 2 ]

0 голосов
/ 15 марта 2020
        final Map<String, Double> hashMap = new HashMap<>();
        hashMap.put("Q40", 1.0);
        hashMap.put("Q41", 3.0);
        hashMap.put("Q49", 2.0);
        hashMap.put("Q50", 20.0);

        Stream.of("Q40", "Q41", "Q49")
                .map(hashMap::get)
                .max(Comparator.comparing(Double::valueOf))
                .ifPresent(d -> System.out.println("The highest value is: " + d));

Обновлено с немного более сжатой версией. Здесь я создаю поток ключей, из которого я хочу извлечь наибольшее значение. Я извлекаю значение как Double из переменной hashMap, затем использую оператор max(), возвращая результат Optional.

0 голосов
/ 15 марта 2020

Примерно так:

Double max = Stream.of("Q40", "Q43", "Q45")
             .map(hashMap::get)
             .mapToDouble(value -> value)
             .max()
             .getAsDouble();
...