Как оставить тип данных неопределенным в HashMap? - PullRequest
0 голосов
/ 17 января 2020

Я хочу написать метод, который получает наибольшее значение из любой HashMap, независимо от типа данных ключа.

Например:

public static int getMax(HashMap<String, Integer> map){

    int maxValue = 0;
    for (String key : map.keySet()){
        int value = map.get(key);
        if (value > maxValue){
            maxValue = value;
        }
    }
    return maxValue;
}

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

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Вы можете использовать потоки:

Optional<Integer> max = map.values().stream().max(Comparator.naturalOrder());

Вы хотите , чтобы тип данных ключа не имел значения . Это решение обеспечивает именно это.

0 голосов
/ 17 января 2020

Вы можете использовать неограниченный подстановочный знак (?) и переключиться на Object в вашем l oop:

public static int getMax(HashMap<?, Integer> map) {

    int maxValue = Integer.MIN_VALUE;
    for (Object key : map.keySet()){
        int value = map.get(key);
        if (value > maxValue){
            maxValue = value;
        }
    }
    return maxValue;
}

Обратите внимание, что вы также должны изменить свой начальный maxValue от 0 до Integer.MIN_VALUE. И в качестве общего (не для целей обучения) подхода я бы посоветовал решение с использованием потоков, предоставленное mentallurg .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...