Flet flere Arrays i Java

i dette indlæg vil vi diskutere, hvordan man fletter flere arrays i Java til et enkelt nyt array. Det nye array skal opretholde den oprindelige rækkefølge af elementer i individuelle arrays.

Java 8

vi kan bruge Stream API i Java 8 og derover til at flette flere arrays. Der er forskellige måder at gøre det på –

liter Stream.af ()

vi kan få en strøm bestående af alle elementer fra hvert array ved hjælp af statisk fabriksmetodestrøm.af(). Når vi har strømmen, kan vi flade den ved hjælp af flatMap () – metoden og derefter konvertere den tilbage til et array ved hjælp af toarray () – metoden.

1
2
3
4
5
6
7

// funktion til at flette flere arrays i Java 8 og derover
offentlig statisk Strengfletning(streng …arrays)
{
retur strøm.af (arrays)
.flatMap (strøm::af) // eller bruge Arrays::strøm
.toArray (streng:: ny);
}

⮚ Stream.concat ()

Stream har concat () metode, der tager to strømme som input og skaber en dovent sammenkædet strøm ud af dem. Vi kan bruge det til at flette flere arrays som vist nedenfor:

1
2
3
4
5
6
7
8
9

// funktion til at flette flere arrays i Java 8 og derover
offentlig statisk Strengfletning(streng …arrays)
{
Stream< String> stream = Stream.af ();
til (streng s: arrays)
stream = Stream.concat (strøm, Arrays.strøm (r));
returstrøm.toArray (streng:: ny);
}

System.arraycopy ()

vi starter med at tildele nok hukommelse til det nye array til at rumme alle de elementer, der findes i alle arrays ved hjælp af Arrays.copyOf (). Så bruger vi systemet.arraycopy () for at kopiere givne arrays til det nye array som vist nedenfor:

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

// funktion til at flette flere arrays i Java
offentlig statisk Strengfletning(streng… arrays)
{
int finalLength = 0;
til (streng array : arrays) {
finalLength += array.længde;
}
String dest = null;
int destPos = 0;
til (streng array: arrays)
{
hvis (dest == null) {
dest = Arrays.copyOf (array, finalLength);
destPos = array.længde;
} ellers {
System.arraycopy (array, 0, dest, destPos, array.længde);
destPos += array.længde;
}
}
retur dest;
}

her er en version, der fungerer med generiske stoffer:

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

// generisk funktion til at flette flere arrays af samme type i Java
offentlig statisk < T> t merge(T… arrays)
{
int finalLength = 0;
til (T array : arrays) {
finalLength += array.længde;
}
T dest = null;
int destPos = 0;
til (T array: arrays)
{
hvis (dest == null) {
dest = Arrays.copyOf (array, finalLength);
destPos = array.længde;
} ellers {
System.arraycopy (array, 0, dest, destPos, array.længde);
destPos += array.længde;
}
}
retur dest;
}

liste

vi kan også bruge en liste til at flette flere arrays i Java som vist nedenfor. Denne tilgang anbefales ikke, da den indebærer oprettelse af et mellemliggende Listeobjekt.

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

// funktion til at flette flere arrays i Java 8 og derover
offentlig statisk Strengfletning(streng… arrays)
{
liste< String> resultat = ny ArrayList<>();
Stream.af (arrays)
.flatMap (strøm::af)
.kort (> (streng)
.forEach (resultat::Tilføj);
returresultat.toArray (ny streng);
}

for Java 7 og før kan vi bruge Collections.addAll() metode:

1
2
3
4
5
6
7
8
9
10

// funktion til at flette flere arrays i Java
offentlig statisk Strengfletning(streng… arrays)
{
liste< String> liste = ny ArrayList<>();
til (streng array : arrays)
samlinger.addAll (liste, array);
returliste.toArray (ny streng);
}

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.