web-dev-qa-db-ja.com

2つのint []を連結する

Java by Streams)で2つのString[]またはInteger[]を連結する簡単な解決策があります。int[]が頻繁に使用されるため、 2つを連結する簡単な方法int[]

これが私の考えです:

int[] c = {1, 34};
int[] d = {3, 1, 5};
Integer[] cc = IntStream.of(c).boxed().toArray(Integer[]::new);
Integer[] dd = Arrays.stream(d).boxed().toArray(Integer[]::new);
int[] m = Stream.concat(Stream.of(cc), Stream.of(dd)).mapToInt(Integer::intValue).toArray();
System.out.println(Arrays.toString(m));

>>
[1, 34, 3, 1, 5]

機能しますが、実際にはint[]Integer[]に変換してから、Integer[]int[]に再度変換します。

24
Simon Z.

_IntStream.concat_を_Arrays.stream_と組み合わせて使用​​すると、自動ボックス化やボックス化解除を行わずにこの処理を実行できます。これがその様子です。

_int[] result = IntStream.concat(Arrays.stream(c), Arrays.stream(d)).toArray();
_

Arrays.stream(c)IntStreamを返すことに注意してください。これは、配列に収集される前に他のIntStreamと連結されます。

これが出力です。

[1、34、3、1、5]

27

次のようにIntStream.concatを使用して、単純にプリミティブ(int)ストリームを連結できます。

int[] m = IntStream.concat(IntStream.of(c), IntStream.of(d)).toArray();
19
Naman

Forループを使用して、toArray()の使用を回避します。

int[] e = new int[c.length+d.length];
int eIndex = 0;
for (int index = 0; index < c.length; index++){
    e[eIndex] = c[index];
    eIndex++;
}
for (int index = 0; index < d.length; index++){
    e[eIndex] = d[index];
    eIndex++;
}
2
the gamer cat