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);
}
|