У меня есть HashMap, которые мне нужно фильтровать с помощью некоторой функции:Collect поток в HashMap с лямбда в Java 8
HashMap<Set<Integer>, Double> container
Map.Entry<Set<Integer>, Double> map = container.entrySet()
.stream()
.filter(k -> k.getKey().size() == size)
Для размера = 2 должно быть справедливо следующее:
containerBeforeFilter = {1,2,3} -> 1.5, {1,2} -> 1.3
containerAfterFilter = {1,2} -> 1.3
После того, как я применил функцию в фильтре, я хочу снова собрать результаты в HashMap. Однако, когда я пытаюсь применить предложенный метод here, я получаю незаконные утверждения.
Так следующее утверждение, применяется после фильтра, является незаконным:
.collect(Collectors.toMap((entry) -> entry.getKey(), (entry) -> entry.getValue()));
Что бы правильный способ сбора значений без изменений на карте, где единственным критерием является удовлетворение какой-то ключ?
UPDATE
Ошибка в коде выше тип переменной map
. Это должно быть Map
, а не Map.Entry
.
Так функциональный код:
Map<Set<Integer>, Double> map = container.entrySet()
.stream()
.filter(k -> k.getKey().size() == size)
.collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue()));
Вы можете разместить какую версию Java вы используете? Я не могу воспроизвести вашу проблему. – Flown
Это последний JDK 8u65 – chao
Я также использую последний JDK, и это не сработает для вас: «Карта, Double> collect = container.entrySet(). Stream(). Filter (k -> k.getKey() .size() == size) .collect (Collectors.toMap (Entry :: getKey, Entry :: getValue)); ' –
Flown