Sloučit Více Polí v Javě

V tomto příspěvku, budeme diskutovat o tom, jak sloučit více polí v Javě do jednoho nového pole. Nové pole by mělo zachovat původní pořadí prvků v jednotlivých polích.

Java 8

můžeme použít Stream API v Javě 8 a vyšší ke sloučení více polí. Existují různé způsoby, jak to udělat –

Stream Stream.z ()

můžeme získat proud sestávající ze všech prvků z každého pole pomocí proudu statické tovární metody.z(). Jakmile máme proud, můžeme jej zploštit pomocí metody flatMap() a poté jej převést zpět na pole pomocí metody toArray ().

1
2
3
4
5
6
7

// Funkce sloučit více polí v Javě 8 a výše
public static String sloučit(String …pole)
{
zpáteční proud.z (polí)
.flatMap(Stream:: of) / / nebo použít pole:: stream
.toArray (řetězec:: nový);
}

⮚ Stream.concat ()

proud má metodu concat (), která bere dva proudy jako vstup a vytváří z nich líně zřetězený proud. Můžeme ji použít k sloučit více polí, jak je znázorněno níže:

1
2
3
4
5
6
7
8
9

// Funkce sloučit více polí v Javě 8 a výše
public static String sloučit(String …pole)
{
Stream<String> stream = Stream.z ();
pro (String s: pole)
stream = Stream.concat (proud, pole.proud(y));
zpětný proud.toArray (řetězec:: nový);
}

systém.arraycopy ()

začneme přidělením dostatečného množství paměti novému poli pro uložení všech prvků přítomných ve všech polích pomocí polí.copyOf(). Pak použijeme systém.arraycopy () kopírovat daná pole do nového pole, jak je uvedeno níže:

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

// Funkce sloučit více polí v Javě
public static String sloučit(String… pole)
{
int finalLength = 0;
pro (String array : pole) {
finalLength + = array.délka;
}
Řetězec dest = null;
int destPos = 0;
pro (String array : pole)
{
pokud (dest == null) {
dest = Arrays.copyOf (array, finalLength);
destPos = array.délka;
} else {
System.arraycopy (array, 0, dest, destPos, array.délka);
destPos += array.délka;
}
}
návrat dest;
}

zde je verze, která pracuje s Generiky:

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

// Generické funkce pro slučování více polí stejného typu v Javě
public static <T> T sloučit(T… pole)
{
int finalLength = 0;
pro (T array : pole) {
finalLength + = array.délka;
}
T dest = null;
int destPos = 0;
(T array : pole)
{
pokud (dest == null) {
dest = Arrays.copyOf (array, finalLength);
destPos = array.délka;
} else {
System.arraycopy (array, 0, dest, destPos, array.délka);
destPos += array.délka;
}
}
návrat dest;
}

Seznam

můžeme také použít Seznam sloučit více polí v Javě, jak je uvedeno níže. Tento přístup se nedoporučuje, protože zahrnuje vytvoření objektu zprostředkujícího seznamu.

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

// Funkce sloučit více polí v Javě 8 a výše
public static String sloučit(String… pole)
{
seznam<řetězec> výsledek = nový ArrayList<>();
Stream.z (polí)
.flatMap (Stream::of)
.mapa (x – > (řetězec)x)
.forEach (výsledek:: add);
výsledek návratu.toArray (nový řetězec);
}

pro Javu 7 a dříve můžeme použít metodu Collections.addAll() :

1
2
3
4
5
6
7
8
9
10

// Funkce sloučit více polí v Javě
public static String sloučit(String… pole)
{
seznam<řetězec> seznam = nový ArrayList<>();
pro (String array : arrays)
kolekce.addAll (list, array);
návratový seznam.toArray (nový řetězec);
}

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.