sammanfoga flera arrayer i Java

i det här inlägget kommer vi att diskutera hur man sammanfogar flera arrayer i Java till en enda ny array. Den nya matrisen bör behålla den ursprungliga ordningen av element i enskilda matriser.

Java 8

vi kan använda Stream API i Java 8 och senare för att slå samman flera matriser. Det finns olika sätt att göra det –

bisexuell ström.av ()

vi kan få en ström som består av alla element från varje array med statisk fabriksmetod ström.av(). När vi har strömmen kan vi platta den med flatMap () – metoden och sedan konvertera den tillbaka till en array med toarray () – metoden.

1
2
3
4
5
6
7

// funktion för att slå samman flera matriser i Java 8 och senare
offentlig statisk sträng sammanslagning(sträng …matriser)
{
återvänd strömmen.av (matriser)
.flatMap (ström::av) // eller använda matriser::ström
.toArray (sträng:: ny);
}

⮚ ström.concat ()

Stream har concat () – metod som tar två strömmar som inmatning och skapar en lat sammanfogad ström ur dem. Vi kan använda den för att slå samman flera matriser som visas nedan:

1
2
3
4
5
6
7
8
9

// funktion för att slå samman flera matriser i Java 8 och senare
offentlig statisk sträng sammanslagning(sträng …matriser)
{
ström< sträng> ström = ström.av ();
för (sträng s: matriser)
ström = ström.concat (ström, matriser.ström (er));
returström.toArray (sträng:: ny);
}

systemet.arraycopy ()

vi börjar med att allokera tillräckligt med minne till den nya arrayen för att rymma alla element som finns i alla arrayer genom att använda arrayer.copyOf (). Sedan använder vi systemet.arraycopy () för att kopiera givna matriser till den nya matrisen som visas nedan:

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

// funktion för att slå samman flera matriser i Java
public static String merge(String… matriser)
{
int finalLength = 0;
för (Strängmatris : arrays) {
finalLength += array.längd;
}
String dest = null;
int destPos = 0;
för (Strängmatris : arrayer)
{
om (dest == null) {
dest = matriser.copyOf (array, finalLength);
destPos = array.längd;
} annars {
systemet.arraycopy (array, 0, dest, destPos, array.längd);
destPos += array.längd;
}
}
tillbaka dest;
}

här är en version som fungerar med generika:

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 för att slå samman flera matriser av samma typ i Java
public static <T> t merge(T… matriser)
{
int finalLength = 0;
för (t array : arrays) {
finalLength += array.längd;
}
T dest = null;
int destPos = 0;
för (T array : arrayer)
{
om (dest == null) {
dest = matriser.copyOf (array, finalLength);
destPos = array.längd;
} annars {
systemet.arraycopy (array, 0, dest, destPos, array.längd);
destPos += array.längd;
}
}
tillbaka dest;
}

lista

vi kan också använda en lista för att slå samman flera arrayer i Java som visas nedan. Detta tillvägagångssätt rekommenderas inte eftersom det innebär att ett mellanliggande listobjekt skapas.

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

// funktion för att slå samman flera matriser i Java 8 och senare
offentlig statisk sträng sammanslagning(sträng… matriser)
{
lista< sträng> resultat = ny ArrayList<>();
ström.av (matriser)
.flatMap (ström::av)
.karta (x – >(sträng)x)
.forEach (resultat::lägg till);
returresultat.toArray (ny sträng);
}

för Java 7 och tidigare kan vi använda Collections.addAll() – metoden:

1
2
3
4
5
6
7
8
9
10

// funktion för att slå samman flera matriser i Java
public static String merge(String… matriser)
{
lista< sträng> lista = ny ArrayList<>();
för (String array : arrays)
Samlingar.addAll (lista, array);
returlista.toArray (ny sträng);
}

Lämna ett svar

Din e-postadress kommer inte publiceras.