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]リンク://タグ/ストリーム/[ストリーム]