Java 8 Stream API-用Java 8重写的Java 9 Collectors.flatMapping

问题描述 投票:12回答:2

我联系了一个新功能,因为称为Collectors.flatMapping,是在分组或分区的下游进行的。例如(取自Collectors.flatMapping的示例):

here

{4 = [8,10],6 = [2,4,6]}

这是仅使用3收集器的一种相当优雅的方法。我需要在尚不支持的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()))); 中重写收集器。我尝试使用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 java-8 java-stream java-9 collectors
2个回答
9
投票

仅针对[[this

特殊情况,我想这将是一个更简单的版本:

15
投票
我只需要移植 Map<Integer, List<Integer>> map = list.stream() .collect(Collectors.toMap( Collection::size, x -> x.stream().filter(y -> y % 2 == 0).collect(Collectors.toCollection(ArrayList::new)), (left, right) -> { left.addAll(right); return left; } )); 。它仅需要2个方法和1个类,而没有其他依赖项。
© www.soinside.com 2019 - 2024. All rights reserved.