Zwei Arrays verbinden

In Java gibt es mehrere Wege um zwei Arrays zusammenzufügen oder zu addieren: Mit Java-Hausmitteln vor Java 8, mit Java 8 Streams, oder mit Hilfe der Libraries Guava oder Apache Commons.

Inhaltsverzeichnis

2 Arrays zusammenfügen vor Java 8

Um 2 Arrays zu einem zu vereinigen, verwenden wir zwei Methoden der Java Standard Edition: Arrays.copyOf() und System.arraycopy(). Arrays.copyOf() erstellt ein neues Array result mit dem Inhalt des ersten Arrays one, aber mit der Länge von beiden Arrays. System.arraycopy() macht dann die eigentliche Arbeit des Kopierens: es kopiert das zweite Array two in das gerade mit der Länge beider Arrays erstellte Array result.

import java.util.Arrays;

public class ConcatArrays {

    public static void main(String[] args) {
        String[] beer = {"Zwickl", "Porter", "Weizen", "Pils"};
        String[] wine = {"Grüner Veltliner", "Chardonnay",
            "Blauburgunder", "Merlot"};
        String[] drinks = concatArrays(beer, wine);
    }

    public static <T> T[] concatArrays(T[] one, T[] two) {
        T[] result = Arrays.copyOf(one, one.length + two.length);
        System.arraycopy(two, 0, result, one.length, two.length);
        return result;
    }
}

Warum die Methode copyOf() in der Util-Klasse Arrays ist, aber die Methode arraycopy() in der Klasse System, ist unlogisch. Der Grund dürfte schlicht und einfach historischer Natur sein: Die Klasse System gibt es seit Java 1.0, die Klasse Arrays erst seit Java 1.2.

↑ Nach oben

2 Arrays verbinden mit Java 8 Streams

In Java 8 wurde die API um Streams erweitert, die ein elegantes deklaratives fluent Interface zur Verarbeitung von Collections darstellt.

Arrays können mittels Arrays.stream() recht einfach in einen Stream umgewandelt werden. Dieser enthält dann alle Elemente des Arrays.

import java.util.Arrays;
import java.util.stream.Stream;

public class ConcatArrays {

    public static void main(String[] args) {
        String[] beer = {"Zwickl", "Porter", "Weizen", "Pils"};
        String[] wine = {"Grüner Veltliner", "Chardonnay", 
            "Blauburgunder", "Merlot"};
        String[] drinks = Stream.concat(
                Arrays.stream(beer), 
                Arrays.stream(wine)
            ).toArray(String[]::new);
    }
}

Stream.concat() erzeugt einen neuen Stream, der die Elemente des ersten Streams vor den Elementen des zweiten enthält. Die Methode toArray() wandelt den Stram dann wieder in ein Array um.

↑ Nach oben

Arrays verknüpfen mit Google Guava

Google Guava bietet mit der Methode ObjectArrays.concat() eine einfache Möglichkeit, zwei Arrays zu addieren.

import com.google.common.collect.ObjectArrays;

public class ConcatArrays {

    public static void main(String[] args) {
        String[] beer = {"Zwickl", "Porter", "Weizen", "Pils"};
        String[] wine = {"Grüner Veltliner", "Chardonnay", 
            "Blauburgunder", "Merlot"};
        String[] drinks = ObjectArrays.concat(beer, wine, String.class);
    }
}

↑ Nach oben

Arrays addieren mit Apache Commons Lang ArrayUtils

Auch Apache Commons stellt in der Klasse ArrayUtils eine Methode zum zusammenfügen von Arrays bereit:

import org.apache.commons.lang3.ArrayUtils;

public class ConcatArrays {

    public static void main(String[] args) {
        String[] beer = {"Zwickl", "Porter", "Weizen", "Pils"};
        String[] wine = {"Grüner Veltliner", "Chardonnay", 
            "Blauburgunder", "Merlot"};
        String[] drinks;

        drinks = ArrayUtils.addAll(beer, wine);
    }
}

↑ Nach oben


Ähnliche Artikel