如何进行反向“flatMap”操作

Kim*_*Kim -1 java java-stream

List<String> flattened = Stream
                .of(Arrays.asList("aa", "bb", "cc"), Arrays.asList("ddd", "eee", "fff"), Arrays.asList("uuuuu", "vvvvv", "kkkkkk"))
                .flatMap(Collection::stream).collect(Collectors.toList());
System.out.println(flattened);
Run Code Online (Sandbox Code Playgroud)

现在打印出来[aa, bb, cc, ddd, eee, fff, uuuuu, vvvvv, kkkkkk]

问题:
如何反转 flatMap 操作?转换此流

[kkkkk, eee, uuuuu, bb, aa, vvvvv, fff, ddd, bb]
Run Code Online (Sandbox Code Playgroud)

回到这个

[[cc, bb, aa], [eee, fff, ddd], [kkkkk, vvvvv, uuuuu]]
Run Code Online (Sandbox Code Playgroud)

Cep*_*pod 5

您必须执行一项collect操作。Java 已经带来了一个你可以使用的标准化收集器库,例如

Collection<List<String>> grouped = flattened.stream()
                .collect(Collectors.groupingBy(String::length))
                .values();
Run Code Online (Sandbox Code Playgroud)