是否可以将流收集到两个收集器中

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

我有一个字符串列表,我想在其中编写文件中的不同字符串集,以及将其转换为UUID并将其存储为另一个变量。是否可以使用Java 8 lambdas以及如何使用?

我要两个收藏家的原因是避免将它运行到第二个循环中。

java lambda java-8 java-stream collectors
2个回答
2
投票

正如@Holger所说,我写了一个pairing collector作为另一个聚集两个收藏家的问题的答案。这个收藏家现在可以在我的StreamEx库中找到:MoreCollectors.pairing。类似的收藏家也是jOOL图书馆中的available


1
投票

这在引入Java 12Collectors.teeing中是可能的:

public static <T, R1, R2, R>
Collector<T, ?, R> teeing(Collector<? super T, ?, R1> downstream1,
                          Collector<? super T, ?, R2> downstream2,
                          BiFunction<? super R1, ? super R2, R> merger);

返回一个由两个下游收集器组合而成的收集器。传递给生成的收集器的每个元素都由下游收集器处理,然后使用指定的合并函数将它们的结果合并到最终结果中。

例:

Entry<Long, Long> entry = Stream
        .of(1, 2, 3, 4, 5)
        .collect(teeing(
                filtering(i -> i % 2 != 0, counting()),
                counting(),
                Map::entry));

System.out.println("Odd count: " + entry.getKey());
System.out.println("Total count: " + entry.getValue());
© www.soinside.com 2019 - 2024. All rights reserved.