Merge mai multe matrice în Java

în acest post, vom discuta despre cum să fuzioneze mai multe matrice în Java într-un singur nou tablou. Noua matrice ar trebui să mențină ordinea inițială a elementelor în matrice individuale.

Java 8

putem folosi Stream API în Java 8 și mai sus pentru a fuziona mai multe matrice. Există mai multe moduri de a face acest lucru –

flux de curent.de ()

putem obține un flux format din toate elementele din fiecare matrice folosind static Factory method Stream.din (). Odată ce avem fluxul, îl putem aplatiza folosind metoda flatMap() și apoi îl putem converti înapoi într-o matrice folosind metoda toArray ().

1
2
3
4
5
6
7

// funcția de a fuziona mai multe matrice în Java 8 și mai sus
publice îmbinare șir static(String …arrays)
{
flux de întoarcere.de (matrice)
.flatMap (flux::de) // sau de a folosi matrice::flux
.torray(șir:: nou);
}

⮚ Flux.concat ()

Stream are metoda concat () care ia două fluxuri ca intrare și creează un flux leneș concatenat din ele. Îl putem folosi pentru a îmbina mai multe matrice așa cum se arată mai jos:

1
2
3
4
5
6
7
8
9

// funcția de a fuziona mai multe matrice în Java 8 și mai sus
publice îmbinare șir static(String …arrays)
{
Flux < șir > flux = flux.de ();
pentru (String s: arrays)
stream = Stream.concat (flux, matrice.flux(e));
flux retur.torray(String:: nou);
}

sistem.arraycopy ()

începem prin a aloca suficientă memorie noii matrice pentru a găzdui toate elementele prezente în toate matricele folosind matrice.copyOf (). Apoi folosim sistemul.arraycopy () pentru a copia matrice date în noua matrice așa cum se arată mai jos:

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

// funcția de a fuziona mai multe matrice în Java
publice îmbinare șir static(String… arrays)
{
int finalLength = 0;
pentru (string array : arrays) {
finalLength += array.lungime;
}
string dest = null;
int destPos = 0;
pentru (String array : arrays)
{
dacă (dest == null) {
dest = matrice.copyOf (array, finalLength);
destPos = array.lungime;
} altceva {
sistem.arraycopy (matrice, 0, dest, destPos, matrice.lungime);
destPos += matrice.lungime;
}
}
retur dest;
}

Iată o versiune care funcționează cu generice:

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

// funcție generică pentru a îmbina mai multe matrice de același tip în Java
public static <T> t merge(T… arrays)
{
int finalLength = 0;
pentru (matrice T : arrays) {
finalLength += array.lungime;
}
T dest = null;
int destPos = 0;
pentru (T array : arrays)
{
dacă (dest == null) {
dest = matrice.copyOf (array, finalLength);
destPos = array.lungime;
} altceva {
sistem.arraycopy (matrice, 0, dest, destPos, matrice.lungime);
destPos += matrice.lungime;
}
}
retur dest;
}

listă

de asemenea, putem folosi o listă pentru a îmbina mai multe matrice în Java așa cum se arată mai jos. Această abordare nu este recomandată deoarece implică crearea unui obiect de listă intermediară.

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

// funcția de a fuziona mai multe matrice în Java 8 și mai sus
publice îmbinare șir static(String… arrays)
{
listă < șir> rezultat = nou ArrayList<>();
Flux.de (matrice)
.flatMap (flux::de)
.harta(x – >(șir)x)
.forEach (rezultat::adăuga);
întoarce rezultatul.torray (șir nou);
}

pentru Java 7 și înainte, putem folosi Collections.addAll() metodă:

1
2
3
4
5
6
7
8
9
10

// funcția de a fuziona mai multe matrice în Java
publice îmbinare șir static(String… arrays)
{
listă < șir> Listă = Listă nouă<>();
pentru (String array : arrays)
colecții.addAll (listă, matrice);
lista de returnare.torray (șir nou);
}

Lasă un răspuns

Adresa ta de email nu va fi publicată.