Javaで複数の配列をマージする

この記事では、Javaで複数の配列を単一の新しい配列にマージする方法について説明します。 新しい配列は、個々の配列の要素の元の順序を維持する必要があります。

Java8

Java8以降でStream APIを使用して複数の配列をマージできます。 それを行うにはさまざまな方法があります–

Stream Stream。of()

静的ファクトリメソッドStreamを使用して、すべての配列からすべての要素で構成されるstreamを取得できます。の()。 ストリームを取得したら、flatMap()メソッドを使用してそれをフラット化し、toArray()メソッドを使用して配列に変換し直すことができます。

1
2
3
4
5
6
7

// Java8以上で複数の配列をマージする関数
public static String merge(String…配列)
{
ストリームを返します。(配列)
の。flatMap(Stream::of)//またはArrays::stream
を使用します。toArray(String::new);
}

⮚ ストリーム…concat()

Streamには、二つのストリームを入力として受け取り、それらから遅延連結されたストリームを作成するconcat()メソッドがあります。 以下に示すように、複数の配列をマージするために使用できます:

1
2
3
4
5
6
7
8
9

// Java8以上で複数の配列をマージする関数
public static String merge(String…配列)
{
ストリーム<文字列>ストリーム=ストリーム。
for(String s:arrays)
stream=Stream.concat(ストリーム,配列.ストリーム(s));
ストリームを返します。toArray(String::new);
}

システム。arraycopy()

まず、配列を使用して、すべての配列に存在するすべての要素を収容するのに十分なメモリを新しい配列に割り当てることから始めます。copyOf()。 それから私達はシステムを使用します。以下に示すように、指定された配列を新しい配列にコピーするには、arraycopy()を使用します:

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

// Javaで複数の配列をマージする関数
public static String merge(String… 配列)
{
int finalLength=0;
for(String配列 : 配列){
finalLength+=配列。長さ;
}
文字列dest=null;
int destPos=0;
for(String array:arrays)
{
if(dest==null){
dest=配列。copyOf(array,finalLength);
destPos=array.長さ;
}else{
システム。arraycopy(array,0,dest,destPos,array.長さ);
destPos+=配列。長さ;
}
}
destを返す;
}

ジェネリックで動作するバージョンは次のとおりです:

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

// Javaで同じ型の複数の配列をマージする汎用関数
public static<T>t merge(T… 配列)
{
int finalLength=0;
for(t配列 : 配列){
finalLength+=配列。長さ;
}
T dest=null;
int destPos=0;
for(T配列:配列)
{
if(dest==null){
dest=配列。copyOf(array,finalLength);
destPos=array.長さ;
}else{
システム。arraycopy(array,0,dest,destPos,array.長さ);
destPos+=配列。長さ;
}
}
destを返す;
}

List

以下に示すように、Javaで複数の配列をマージするためにListを使用することもできます。 この方法は、中間リストオブジェクトの作成を必要とするため、お勧めしません。

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

// Java8以上で複数の配列をマージする関数
public static String merge(String… 配列)
{
リスト<文字列>結果=新しいArrayList<>();
ストリーム…(配列)
の。flatMap(Stream::of)
.マップ(x->(文字列)x)
。forEach(result::add);
結果を返します。toArray(新しい文字列);
}

Java7以前の場合は、Collections.addAll()メソッドを使用できます:

1
2
3
4
5
6
7
8
9
10

// Javaで複数の配列をマージする関数
public static String merge(String… 配列)
{
リスト<文字列>リスト=新しいArrayList<>();
for(String array:arrays)
コレクション。addAll(list,array);
リストを返します。toArray(新しい文字列);
}

コメントを残す

メールアドレスが公開されることはありません。