How to Merge Two Arrays in Java
In Java, there are several ways to merge or add two arrays: with Java home resources prior to Java 8, with Java 8 streams, or with the help of the Guava or Apache Commons libraries.
Merge two arrays in Java
To merge two arrays into one, we use two methods of the Java Standard Edition: Arrays.copyOf() and System.arraycopy(). Arrays.copyOf() creates a new array result with the contents of the first array one, but with the length of both arrays. System.arraycopy() then does the real work of copying: it copies the second array into the result array just created with the length of both arrays.
[st_adsense]
Example :
import java.util.Arrays; public class MergeArrays { public static void main(String[] args) { String[] birds = {"Angel", "Buddy", "Sunny", "Sunshine"}; String[] cats = {"Lions", "Tigers", "Leopards", "Cheetahs"}; String[] animals = concatArrays(birds, cats); System.out.println(Arrays.toString(animals)); } public static <T> T[] concatArrays(T[] arr1, T[] arr2) { T[] result = Arrays.copyOf(arr1, arr1.length + arr2.length); System.arraycopy(arr2, 0, result, arr1.length, arr2.length); return result; } }
Output:
[Angel, Buddy, Sunny, Sunshine, Lions, Tigers, Leopards, Cheetahs]
Why the method copyOf() is in the Util class Arrays, but the method arraycopy() in the class System, is illogical. The reason should be quite simply historical: the System class has been around since Java 1.0, the Arrays class only since Java 1.2.
[st_adsense]
Merge two arrays in Java with Java 8 streams
In Java 8, the API was extended to include streams, which represent an elegant declarative fluent interface for processing collections.
Arrays can be converted into a stream quite easily using Arrays.stream(). This stream contains all elements of the array.
Example :
import java.util.Arrays; import java.util.stream.Stream; public class MergeArrays { public static void main(String[] args) { String[] birds = {"Angel", "Buddy", "Sunny", "Sunshine"}; String[] cats = {"Lions", "Tigers", "Leopards", "Cheetahs"}; String[] animals = Stream.concat( Arrays.stream(birds), Arrays.stream(cats) ).toArray(String[]::new); System.out.println(Arrays.toString(animals)); } }
Output:
[Angel, Buddy, Sunny, Sunshine, Lions, Tigers, Leopards, Cheetahs]
Stream.concat() creates a new stream containing the elements of the first stream before the elements of the second stream. The method toArray() converts the stream back into an array.
[st_adsense]
Merge two arrays in Java with Google Guava
Google Guava offers an easy way to merge two arrays with the ObjectArrays.concat() method.
import java.util.Arrays; import com.google.common.collect.ObjectArrays; public class MergeArrays { public static void main(String[] args) { String[] birds = {"Angel", "Buddy", "Sunny", "Sunshine"}; String[] cats = {"Lions", "Tigers", "Leopards", "Cheetahs"}; String[] animals = ObjectArrays.concat(birds, cats, String.class); System.out.println(Arrays.toString(animals)); } }
Output:
[Angel, Buddy, Sunny, Sunshine, Lions, Tigers, Leopards, Cheetahs][st_adsense]
Merge two arrays in Java with Apache Commons Lang ArrayUtils
Apache Commons also provides a method for merging arrays in the ArrayUtils class:
import java.util.Arrays; import org.apache.commons.lang3.ArrayUtils; public class MergeArrays { public static void main(String[] args) { String[] birds = {"Angel", "Buddy", "Sunny", "Sunshine"}; String[] cats = {"Lions", "Tigers", "Leopards", "Cheetahs"}; String[] animals; animals = ArrayUtils.addAll(birds, cats); System.out.println(Arrays.toString(animals)); } }
Output:
[Angel, Buddy, Sunny, Sunshine, Lions, Tigers, Leopards, Cheetahs][st_adsense]