You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Java Stream实现数组元素的重复复制

用Java Stream实现数组元素重复一次的方案

嘿,这个需求用Java Stream来实现其实挺简单的,核心就是把每个元素“复制”一份,再把所有元素整合到同一个流里,最后转成数组就行。我给你分享两种常用且高效的实现方式:

方式一:直接用flatMap生成重复元素流

这是最直观的写法,利用flatMap把每个元素映射为包含两个自身的小流,再合并成一个完整的流:

import java.util.Arrays;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int[] a = {1,2,3,4,5};
        int[] result = Arrays.stream(a)
                             // 给每个元素生成包含两个自身的IntStream
                             .flatMap(num -> IntStream.of(num, num))
                             // 转成目标数组
                             .toArray();
        
        // 输出验证:[1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
        System.out.println(Arrays.toString(result));
    }
}

方式二:通过数组中转实现(适合理解flatMap逻辑)

如果想更清晰地看到“复制”的过程,也可以先把每个元素转成包含两个元素的数组,再扁平化处理:

int[] result = Arrays.stream(a)
                     // 把每个int转成包含两个自身的int数组
                     .mapToObj(num -> new int[]{num, num})
                     // 把数组流转成IntStream并合并
                     .flatMapToInt(Arrays::stream)
                     .toArray();

扩展技巧:支持重复N次

如果以后需要把元素重复N次(比如3次),只需要修改flatMap里的逻辑,用IntStream.generate配合limit即可:

int repeatTimes = 3; // 重复3次
int[] result = Arrays.stream(a)
                     .flatMap(num -> IntStream.generate(() -> num).limit(repeatTimes))
                     .toArray();
// 结果会是:[1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]

内容的提问来源于stack exchange,提问作者Артур Гудиев

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:39:38