Unisci più array in Java

In questo post, discuteremo come unire più array in Java in un unico nuovo array. Il nuovo array dovrebbe mantenere l’ordine originale degli elementi nei singoli array.

Java 8

Possiamo utilizzare l’API Stream in Java 8 e versioni successive per unire più array. Ci sono vari modi per farlo-

Stream Stream.of ()

Possiamo ottenere un flusso composto da tutti gli elementi di ogni array utilizzando il flusso del metodo di fabbrica statico.di(). Una volta che abbiamo il flusso, possiamo appiattirlo usando il metodo flatMap() e quindi convertirlo in un array usando il metodo toArray ().

1
2
3
4
5
6
7

// Funzione per l’unione di più array in Java 8 e sopra
public static String merge(Stringa …matrici)
{
flusso di ritorno.di (array)
.flatMap (Stream:: di) / / o utilizzare Array:: stream
.toArray (Stringa:: nuovo);
}

⮚ Flusso.concat ()

Stream ha il metodo concat () che prende due stream come input e crea un flusso pigramente concatenato da essi. Si può usare per unire più matrici, come illustrato di seguito:

1
2
3
4
5
6
7
8
9

// Funzione per l’unione di più array in Java 8 e sopra
public static String merge(Stringa …matrici)
{
Flusso < Stringa > flusso = Flusso.di ();
per (Stringa s: array)
stream = Stream.concat (flusso, array.flusso (s));
flusso di ritorno.toArray (Stringa:: nuovo);
}

Sistema.arraycopy ()

Iniziamo allocando abbastanza memoria al nuovo array per ospitare tutti gli elementi presenti in tutti gli array usando gli array.copyOf (). Quindi usiamo il sistema.arraycopy () per copiare determinati array nel nuovo array come mostrato di seguito:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

// Funzione per l’unione di più array in Java
public static String merge(Stringa… matrici)
{
int finalLength = 0;
per (array di stringhe : array) {
Lunghezza finale += array.lunghezza;
}
String dest = null;
int destPos = 0;
for (Array di stringhe: array)
{
if (dest = = null) {
dest = Array.copyOf (array, lunghezza finale);
destPos = array.lunghezza;
} else {
Sistema.arraycopy(array, 0, dest, destPos, array.lunghezza);
destPos + = array.lunghezza;
}
}
ritorno dest;
}

Ecco una versione che funziona con i generici:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

// Una generica funzione di unire più matrici dello stesso tipo in Java
public static <T> T merge(T… matrici)
{
int finalLength = 0;
per (T array : array) {
Lunghezza finale += array.lunghezza;
}
T dest = null;
int destPos = 0;
per (T array: array)
{
if (dest = = null) {
dest = Array.copyOf (array, lunghezza finale);
destPos = array.lunghezza;
} else {
Sistema.arraycopy(array, 0, dest, destPos, array.lunghezza);
destPos + = array.lunghezza;
}
}
ritorno dest;
}

List

Possiamo anche usare un elenco per unire più array in Java come mostrato di seguito. Questo approccio non è raccomandato poiché comporta la creazione di un oggetto Elenco intermedio.

1
2
3
4
5
6
7
8
9
10
11
12

// Funzione per l’unione di più array in Java 8 e sopra
public static String merge(Stringa… matrici)
{
List < String > result = nuovo ArrayList<>();
Flusso.di (array)
.flatMap (Flusso:: di)
.mappa (x – > (Stringa)x)
.forEach (result:: add);
restituisce il risultato.toArray(nuova stringa);
}

Per Java 7 e prima, possiamo usare il metodo Collections.addAll() :

1
2
3
4
5
6
7
8
9
10

// Funzione per l’unione di più array in Java
public static String merge(Stringa… matrici)
{
List < String > list = nuovo ArrayList<>();
per (Array di stringhe : array)
Collezioni.addAll (elenco, array);
lista di ritorno.toArray(nuova stringa);
}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.