Проблема. Я хочу, чтобы результирующая карта содержала все доступные enums
, а если не найдена в повторном списке, следует предварительно инициализировать long = 0
.
List<Basket> basket;
Map<TypeOfGoods, Long> counts = basket.stream
.collect(Collectors.groupingBy(Basket::getGoodsType, Collectors.counting()));
enum TypeOfGoods {
FRUITS, TOYS;
}
В этом примере карта будет содержать только те типы, которые действительно находятся в корзине, но отсутствуют какие-либо другие перечисления. Как я могу также включить их?
Другой альтернативой было бы использование putIfAbsent
:
Map<TypeOfGoods, Long> counts = basket.stream()
.collect(groupingBy(Basket::getGoodsType, counting()));
Arrays.asList(TypeOfGoods.values()).forEach(e -> counts.putIfAbsent(e, 0L));
Пытаться:
Map<TypeOfGoods, Long> counts = Arrays.stream(TypeOfGoods.values())
.collect(Collectors.toMap(identity(), x -> 0L));
counts.putAll(basket.stream
.collect(Collectors.groupingBy(Basket::getGoodsType, Collectors.counting()));
constant()
? Все еще не мог найти это.