Fusionner plusieurs tableaux en Java

Dans cet article, nous allons discuter de la façon de fusionner plusieurs tableaux en Java en un seul nouveau tableau. Le nouveau tableau doit conserver l’ordre d’origine des éléments dans les tableaux individuels.

Java 8

Nous pouvons utiliser l’API Stream en Java 8 et au-dessus pour fusionner plusieurs tableaux. Il existe différentes façons de le faire –

Stream Stream.de ()

Nous pouvons obtenir un flux composé de tous les éléments de chaque tableau en utilisant un flux de méthode d’usine statique.de(). Une fois que nous avons le flux, nous pouvons l’aplatir à l’aide de la méthode flatMap(), puis le convertir en un tableau à l’aide de la méthode toArray().

1
2
3
4
5
6
7

// Fonction pour fusionner plusieurs tableaux dans Java 8 et au-dessus
fusion de chaînes statiques publiques (String…tableaux)
{
flux de retour.de (tableaux)
.flatMap(Stream::of) // ou utilisez Arrays::stream
.toArray (Chaîne :: nouveau);
}

⮚ Flux.le flux concat()

a la méthode concat() qui prend deux flux en entrée et en crée un flux concaténé paresseusement. Nous pouvons l’utiliser pour fusionner plusieurs tableaux comme indiqué ci-dessous:

1
2
3
4
5
6
7
8
9

// Fonction pour fusionner plusieurs tableaux dans Java 8 et au-dessus
fusion de chaînes statiques publiques (String…tableaux)
{
Stream < Chaîne > stream=Stream.de ();
pour (Chaîne s: tableaux)
Stream= Stream.concat(flux, tableaux.flux (s));
flux de retour.toArray(Chaîne :: nouveau);
}

Système.arraycopy()

Nous commençons par allouer suffisamment de mémoire au nouveau tableau pour accueillir tous les éléments présents dans tous les tableaux en utilisant des tableaux.copyOf(). Ensuite, nous utilisons le système.arraycopy() pour copier des tableaux donnés dans le nouveau tableau comme indiqué ci-dessous:

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

// Fonction pour fusionner plusieurs tableaux dans Java
fusion de chaînes statiques publiques (String… tableaux)
{
int finalLength = 0;
pour (Tableau de chaînes : tableau) {
finalLength += tableau.longueur;
}
String dest = null;
int destPos = 0;
for (Tableau de chaînes: tableaux)
{
if(dest == null) {
dest = Tableaux.copyOf(array, finalLength);
destPos=array.longueur;
} else {
Système.arraycopy(array, 0, dest, destPos, array.length);
destPos+= tableau.longueur;
}
}
retour dest;
}

Voici une version qui fonctionne avec les génériques:

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

// Fonction générique pour fusionner plusieurs tableaux de même type en Java
statique publique < T > T merge(T… tableaux)
{
int finalLength = 0;
pour (tableau T : tableau) {
finalLength += tableau.longueur;
}
T dest = null;
int destPos = 0;
for (T array: tableaux)
{
if(dest == null) {
dest = Tableaux.copyOf(array, finalLength);
destPos=array.longueur;
} else {
Système.arraycopy(array, 0, dest, destPos, array.length);
destPos+= tableau.longueur;
}
}
retour dest;
}

List

Nous pouvons également utiliser une liste pour fusionner plusieurs tableaux en Java, comme indiqué ci-dessous. Cette approche n’est pas recommandée car elle implique la création d’un objet de liste intermédiaire.

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

// Fonction pour fusionner plusieurs tableaux dans Java 8 et au-dessus
fusion de chaînes statiques publiques (String… tableaux)
{
List < String > result = new ArrayList<>();
Flux.de (tableaux)
.flatMap(Flux::de)
.map(x-> (Chaîne) x)
.forEach(result::add);
renvoie le résultat.toArray (nouvelle chaîne);
}

Pour Java 7 et avant, nous pouvons utiliser la méthode Collections.addAll():

1
2
3
4
5
6
7
8
9
10

// Fonction pour fusionner plusieurs tableaux dans Java
fusion de chaînes statiques publiques (String… tableaux)
{
Liste < Chaîne > liste = nouvelle liste de tableaux<>();
pour (Tableau de chaînes: tableaux)
Collections.addAll(liste, tableau);
liste de retour.toArray (nouvelle chaîne);
}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.