több tömb egyesítése Java-ban

ebben a bejegyzésben megvitatjuk, hogyan lehet több tömböt egyesíteni Java-ban egyetlen új tömbbe. Az új tömbnek meg kell őriznie az elemek eredeti sorrendjét az egyes tömbökben.

Java 8

a Stream API-t használhatjuk Java 8 vagy újabb verziókban több tömb egyesítésére. Ennek különböző módjai vannak –

adatfolyam.nak, – nek()

minden tömb összes eleméből álló adatfolyamot kaphatunk statikus gyári módszer folyammal.az (). Miután megvan az adatfolyam, a flatMap() módszerrel simíthatjuk, majd a toarray() módszerrel konvertálhatjuk tömbbé.

1
2
3
4
5
6
7

// funkció egyesíteni több tömbök Java 8 felett
public static String merge (String …tömbök)
{
visszatérő patak.(tömbök)
.flatMap (Stream::of) // vagy használja tömbök::stream
.toArray (karakterlánc:: új);
}

⮚ patak.a concat()

Stream rendelkezik concat() metódussal, amely két adatfolyamot vesz be bemenetként, és lustán összefűzött adatfolyamot hoz létre belőlük. Tudjuk használni, hogy egyesítse több tömbök az alábbiak szerint:

1
2
3
4
5
6
7
8
9

// funkció egyesíteni több tömbök Java 8 felett
public static String merge (String …tömbök)
{
Stream< String> stream = Stream.of ();
for (String s: tömbök)
stream = Stream.concat (patak, tömbök.adatfolyam(ok));
visszatérő adatfolyam.toArray (String:: új);
}

rendszer.arraycopy ()

kezdjük azzal, hogy elegendő memóriát rendelünk az új tömbhöz az összes tömbben található összes elem befogadására tömbök használatával.copyOf (). Ezután használjuk a rendszert.arraycopy() másolni adott tömbök az új tömb az alábbiak szerint:

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

// funkció egyesíteni több tömbök Java
nyilvános statikus String merge (String… tömbök)
{
int finalLength = 0;
for (karakterlánc tömb : tömbök) {
finalLength += tömb.hossz;
}
String dest = null;
int destPos = 0;
for (String array: tömbök)
{
if (dest = = null) {
dest = tömbök.copyOf (tömb, finalLength);
destPos = tömb.hossz;
} else {
rendszer.arraycopy(tömb, 0, dest, destPos, tömb.hossz);
destPos += tömb.hossz;
}
}
vissza dest;
}

itt van egy verzió, amely a generikus gyógyszerekkel működik:

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

// Általános funkció egyesíteni több tömbök azonos típusú Java
public static <T> T merge (T… tömbök)
{
int finalLength = 0;
for (T tömb : tömbök) {
finalLength += tömb.hossz;
}
T dest = null;
int destPos = 0;
for (T tömb: tömbök)
{
if (dest = = null) {
dest = tömbök.copyOf (tömb, finalLength);
destPos = tömb.hossz;
} else {
rendszer.arraycopy(tömb, 0, dest, destPos, tömb.hossz);
destPos += tömb.hossz;
}
}
vissza dest;
}

lista

listát használhatunk több tömb egyesítésére a Java-ban az alábbiak szerint. Ez a megközelítés nem ajánlott, mivel magában foglalja egy közvetítő lista objektum létrehozását.

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

// funkció egyesíteni több tömbök Java 8 felett
public static String merge (String… tömbök)
{
List< String> eredmény = új ArrayList<>();
patak.(tömbök)
.flatMap (folyam::az)
.térkép (x – >(karakterlánc)x)
.forEach (eredmény::Hozzáadás);
eredmény visszaadása.toArray (új húr);
}

Java 7 és előtte, tudjuk használni Collections.addAll() módszer:

1
2
3
4
5
6
7
8
9
10

// funkció egyesíteni több tömbök Java
nyilvános statikus String merge (String… tömbök)
{
List< String> list = új ArrayList<>();
for (String array : tömbök)
gyűjtemények.addAll (lista, tömb);
visszatérési lista.toArray (új húr);
}

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.