Java – 配列を結合する方法
この記事では、Java Arrayへの参加方法をいくつか紹介します。
-
Apache Commons Lang – ArrayUtils
-
Java API
-
Java 8ストリーム
1. Apache Commons Lang – ArrayUtils
最も簡単な方法は、http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/ArrayUtils.html#addAll%28T%5B%5D,%20T …%29[Apache Commons Lang]ライブラリにあり、 `ArrayUtils。 addAll`を実行して配列を結合します。このメソッドは、プリミティブ型とオブジェクト型の両方の配列をサポートします。
JoinArray.java
package com.mkyong.example.array;
import org.apache.commons.lang3.ArrayUtils;
import java.util.Arrays;
public class JoinArray {
public static void main(String[]args) {
String[]s1 = new String[]{"a", "b", "c"};
String[]s2 = new String[]{"d", "e", "f"};
String[]result = ArrayUtils.addAll(s1, s2);
System.out.println(Arrays.toString(result));
int[]int1 = new int[]{1,2,3};
int[]int2 = new int[]{4,5,6};
int[]result2 = ArrayUtils.addAll(int1, int2);
System.out.println(Arrays.toString(result2));
}
}
出力
….[a, b, c, d, e, f][1, 2, 3, 4, 5, 6]….
Mavenユーザーの場合。
pom.xml
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
2. Java API
純粋なJava APIの例です。プリミティブ型とジェネリック型の両方をサポートしています。
JoinArray.java
package com.mkyong.example.array;
import java.lang.reflect.Array;
import java.util.Arrays;
public class JoinArray {
public static void main(String[]args) {
String[]s1 = new String[]{"a", "b", "c"};
String[]s2 = new String[]{"d", "e", "f"};
String[]s3 = new String[]{"g", "h", "i"};
String[]result = joinArrayGeneric(s1, s2, s3);
System.out.println(Arrays.toString(result));
int[]int1 = new int[]{1, 2, 3};
int[]int2 = new int[]{4, 5, 6};
int[]int3 = new int[]{7, 8, 9};
int[]result2 = joinArray(int1, int2, int3);
System.out.println(Arrays.toString(result2));
}
static <T> T[]joinArrayGeneric(T[]... arrays) {
int length = 0;
for (T[]array : arrays) {
length += array.length;
}
//T[]result = new T[length];
final T[]result = (T[]) Array.newInstance(arrays[0].getClass().getComponentType(), length);
int offset = 0;
for (T[]array : arrays) {
System.arraycopy(array, 0, result, offset, array.length);
offset += array.length;
}
return result;
}
static int[]joinArray(int[]... arrays) {
int length = 0;
for (int[]array : arrays) {
length += array.length;
}
final int[]result = new int[length];
int offset = 0;
for (int[]array : arrays) {
System.arraycopy(array, 0, result, offset, array.length);
offset += array.length;
}
return result;
}
//create other overloaded primitive type - long, double...
//static long[]joinArray(long[]... arrays)
}
出力
….[a, b, c, d, e, f, g, h, i][1, 2, 3, 4, 5, 6, 7, 8, 9]….
3. Java 8ストリーム
配列を結合するJava 8 Streamの例
JoinArray.java
package com.mkyong.example.array;
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class JoinArray {
public static void main(String[]args) {
String[]s1 = new String[]{"a", "b", "c"};
String[]s2 = new String[]{"d", "e", "f"};
String[]s3 = new String[]{"g", "h", "i"};
//join object type array
String[]result = Stream.of(s1, s2, s3).flatMap(Stream::of).toArray(String[]::new);
System.out.println(Arrays.toString(result));
int[]int1 = new int[]{1,2,3};
int[]int2 = new int[]{4,5,6};
int[]int3 = new int[]{7,8,9};
//join 2 primitive type array
int[]result2 = IntStream.concat(Arrays.stream(int1), Arrays.stream(int2)).toArray();
//join 3 primitive type array, any better idea?
int[]result3 = IntStream.concat(Arrays.stream(int1),
IntStream.concat(Arrays.stream(int2), Arrays.stream(int3))).toArray();
System.out.println(Arrays.toString(result2));
System.out.println(Arrays.toString(result3));
}
}
出力
….[a, b, c, d, e, f, g, h, i][1, 2, 3, 4, 5, 6][1, 2, 3, 4, 5, 6, 7, 8, 9]….
より良いJava 8 Streamの例?以下のコメントをしてください。
参考文献
Commons Lang – ArrayUtils]。
https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html
[Java
8ストリームJavaDoc]。
http://www.deadcoderising.com/2015-05-19-java-8-replace-traditional-for-loops-with-intstreams/
[Java
8:従来のforループをIntStreamsに置き換える]。
http://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/
[Java
8ストリームチュートリアル]
リンク://タグ/配列/[配列]リンク://タグ/java/[java]リンク://タグ/java8/[java8]リンク://タグ/ストリーム/[ストリーム]