Я узнал о новой функции, так как java- 9 под названием Collectors.flatMapping
, который происходит после группировки или разделения. Например, (пример взят из здесь а>):
List<List<Integer>> list = Arrays.asList(
Arrays.asList(1, 2, 3, 4, 5, 6),
Arrays.asList(7, 8, 9, 10));
Map<Integer, List<Integer>> map =list.stream()
.collect(Collectors.groupingBy(
Collection::size,
Collectors.flatMapping(
l -> l.stream().filter(i -> i % 2 == 0),
Collectors.toList())));
{4=[8, 10], 6=[2, 4, 6]}
Это довольно элегантный способ, использующий всего 3 коллектора. Мне нужно переписать сборщик в java-8 где еще не поддерживается. Моя попытка использовать 6 коллекторов, что является довольно обширным использованием, и я не могу найти способ использовать меньше из них:
Map<Integer, List<Integer>> map = list.stream()
.collect(Collectors.groupingBy(
Collection::size,
Collectors.collectingAndThen(
Collectors.mapping(
l -> l.stream().filter(i -> i % 2 == 0).collect(Collectors.toList()),
Collectors.toList()),
i -> i.stream().flatMap(j -> j.stream()).collect(Collectors.toList()))));
Есть ли более короткий лучший способ, используя только java-8?