java - 双倍流

标签 java java-8 java-stream

我想加倍 Stream (没有 DoubleStream)。这意味着我从一个流开始,想要获得一个新流,其中旧流的每个元素都流式传输两次。所以 1,2,3,4,4,5 给我们 1,1,2,2,3,3,4,4,4,4,5,5。有这样的流操作吗?

最佳答案

创建一个内部流,它将包含两次当前元素和flatMap这个流。

stream.flatMap(e -> Stream.of(e,e))

如果你想将元素的数量乘以 n,你可以创建一个像这样的实用方法:

public static <T> Stream<T> multiplyElements(Stream<T> in, int n) {
    return in.flatMap(e -> IntStream.range(0, n).mapToObj(i -> e));
    //  we can also use    IntStream.rangeClosed(1, n) 
    //  but I am used to iterating from 0 to n (where n is excluded)
}

(但请尝试为该方法使用更好的名称,因为当前名称可能不明确)

使用示例:

multiplyElements(Stream.of(1,2), 3).forEach(System.out::println);

输出:

1
1
1
2
2
2

关于java - 双倍流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30782985/

相关文章:

java - 如何对 Map<String, List<Summary>> 进行排序

java - 如何对日期相关方法进行单元测试?

java - 要映射的计时器类

java - 如何在 jTextArea (或其他类型的控制台)中保留命令提示符的格式?

java - HBase多线程扫描真的很慢

java - Stream in orElse of optional

lambda - 在 Java 8 中将不同类型映射合并为一个

java - findFirst 在 Stream<Optional<T>>

java - 创建 Circle 对象错误 .Java

javascript - Cordova 配置中的 errorUrl 在 Android 上不起作用