我联系了一个新功能,因为java-9称为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收集器,该收集器使用范围很广,我无法找出使用较少的收集器的方法:
java-8
是否有单独使用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()))));
的更短更好的方法?
仅针对[[this
特殊情况,我想这将是一个更简单的版本: 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个类,而没有其他依赖项。