Как использовать лямбду с массивом Java - PullRequest
0 голосов
/ 06 июня 2018

У меня есть массив

byte[] input = new byte[256];

У меня есть карта

Map<Byte, Integer> frequencyMap = new HashMap<>();

Как я могу поместить все элементы в порядке в лямбда-функцию?Мне это нравится, но есть ли другой способ сделать это?

for (var b : input)
        frequencyMap.merge(b, 1, (o1, o2) -> o2 = frequencyMap.get(b) + 1);

Как я могу сделать это без цикла?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Вы можете получить требуемый результат, используя коллекторы groupingBy и summingInt.

Map<Byte, Integer> frequencyMap = 
       IntStream.range(0, input.length)
                .mapToObj(i -> input[i])
                .collect(Collectors.groupingBy(Function.identity(),
                        Collectors.summingInt(e -> 1)));

Это означает, что вам не нужны ни внешняя улучшенная итерация цикла for, ни Map::merge.

0 голосов
/ 06 июня 2018

Это в принципе так же хорошо, как и получается, за исключением того, что ваша функция слияния слишком сложна.Вместо этого напишите

frequencyMap.merge(b, 1, Integer::sum);

(или используйте Multiset из Guava)

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