是否可以遍歷int數組而不是IntStream
,但使用索引?使用索引對迭代IntStream進行迭代
試圖做這樣的事情:
ByteBuf buf = ...;
int[] anArray = ...;
IntStream.of(anArray).forEach(...); // get index so I can do "anArray[index] = buf.x"
是否可以遍歷int數組而不是IntStream
,但使用索引?使用索引對迭代IntStream進行迭代
試圖做這樣的事情:
ByteBuf buf = ...;
int[] anArray = ...;
IntStream.of(anArray).forEach(...); // get index so I can do "anArray[index] = buf.x"
你不應該使用一個IntStream
變異的陣列。相反,請使用Arrays.fill()
方法:
Arrays.fill(anArray, buf.x);
通常,使用Stream API修改源代碼是個不錯的主意。 Stream API最適合處理不可變數據(創建新對象而不是改變現有對象)。如果你想用索引填充一個數組來計算這個值,你可以使用Arrays.setAll
。例如:
int[] arr = new int[10];
Arrays.setAll(arr, i -> i*2);
// array is filled with [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] now
如果你仍然想使用流API,可以產生價值流,並將它們轉儲到陣列之後(而無需手動創建陣列):
int[] arr = IntStream.range(0, 10).map(i -> i*2).toArray();
同樣可以生成數組值不依賴於索引。例如,從隨機數發生器:
Random r = new Random();
int[] arr = IntStream.generate(() -> r.nextInt(1000)).limit(10).toArray();
雖然最好使用專用的方法Random
類:
int[] arr = new Random().ints(10, 0, 1000).toArray();
如果你只是想創建一個數組具有相同值填充它,你也可以使用generate
:
int[] arr = IntStream.generate(() -> buf.x).limit(10).toArray();
雖然使用Arrays.fill
,作爲@FedericoPeraltaSchaffner表明,看起來比較清爽。
如果你想改變'anArray'你爲什麼要使用流? – Amit
您不應該改變已創建流的數組(或集合),否則很可能會導致意外且難以調試的結果。 – Gavin