如何通过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,提问作者Артур Гудиев
相关产品推荐
相关产品推荐

