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

时间:2015-11-10 18:00:31

标签: java lambda java-8 java-stream collectors

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

这在引入Collectors.teeing的{​​{3}}中是可能的:

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