5

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

我要求两个收集器的原因是避免将其运行到第二个循环中。

4

2 回答 2

3

这在Java 12中是可能的,它引入了Collectors.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());
于 2019-02-16T05:29:08.113 回答
2

正如@Holger 所指出的,我写了一个配对收集器来回答另一个聚合两个收集器的问题。这样的收集器现在在我的StreamEx库中很容易获得:MoreCollectors.pairing. jOOL 库中也有类似的收集器。

于 2015-11-11T03:05:40.990 回答