Java 8 Stream API-用Java 8重写的Java 9 Collectors.flatMapping [英] Java 8 Stream API - Java 9 Collectors.flatMapping rewritten in Java 8

查看:345
本文介绍了Java 8 Stream API-用Java 8重写的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]}

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

仅使用 3 个收集器,这是一种相当优雅的方法.我需要在尚不支持.我尝试使用 6 收集器,该收集器使用范围很广,我无法找出减少使用它们的方法:

This is a fairly elegant way using just 3 collectors. I need to rewrite the collector in java-8 where is not yet supported. My attempt use 6 Collectors that is quite an extensive usage and I am not able to figure out a way using less of them:

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()))));

是否仅使用

登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆