【发布时间】:2020-08-04 08:03:48
【问题描述】:
我需要在每次出现特定元素之前添加一个元素。我可以使用 for 循环执行此操作并计算索引,然后添加元素。有没有不使用for循环或不使用流的有效方法。
例如:int[] a = {1,2,4,5,7,9,2,5}
在每次出现 2 之前添加元素 {3} 会导致 {1,3,2,4,5,7,9,3,2,5}
尝试:
int[] a = {1, 2, 4, 5, 7, 9, 2, 5};
int[] new1 = null;
int[] indexToAdd = IntStream.range(0, a.length)
.filter(i -> a[i] == 2)
.map(i -> i)
.toArray();
for(int j = 0; j<indexToAdd.length; j++){
final Integer innerj = new Integer(j);
new1 = IntStream.range(0,a.length)
.map(i -> {
if (i < indexToAdd[innerj]) {
return a[i];
} else if (i == indexToAdd[innerj]) {
return 3 ;
} else {
return a[i - 1];
}
}).toArray();
}
【问题讨论】:
-
你能告诉我们你(可能是低效的)努力吗?
-
如果它已经排好序了,你可以更有效地完成它;-)
-
你不能在没有循环的情况下这样做,因为最快的解决方案是
O(n)。除非你的意思是你不想自己实现循环。 -
@deHaar - 添加了我尝试过的努力。
-
@Druckles- 无法对其进行排序,因为这实际上是来自通道的字节数组,因此无法对其进行操作。
标签: java arrays performance loops java-stream