以下に、複数の ArrayList を連結しながら「重複を除く」「順番を逆にする」ユーティリティ関数をそれぞれ紹介します。
① 重複を除いて連結するバージョン
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public class ListUtils {
@SafeVarargs
public static <T> List<T> mergeWithoutDuplicates(List<T>... lists) {
Set<T> resultSet = new LinkedHashSet<>();
for (List<T> list : lists) {
if (list != null) {
resultSet.addAll(list);
}
}
return new ArrayList<>(resultSet);
}
}
Java特徴
LinkedHashSetを使うことで 重複を除去しつつ順序も保持。- 元の順番を保ったまま、重複だけを取り除きます。
使用例(重複除去)
List<String> list1 = Arrays.asList("Apple", "Banana", "Orange");
List<String> list2 = Arrays.asList("Banana", "Grape");
List<String> merged = ListUtils.mergeWithoutDuplicates(list1, list2);
System.out.println(merged); // [Apple, Banana, Orange, Grape]
Java② 順番を逆にして連結するバージョン
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ListUtils {
@SafeVarargs
public static <T> List<T> mergeReversed(List<T>... lists) {
List<T> result = new ArrayList<>();
for (int i = lists.length - 1; i >= 0; i--) {
List<T> list = lists[i];
if (list != null) {
result.addAll(list);
}
}
return result;
}
}
Java特徴
- リストの順番を逆にして連結(最後のリストが先頭にくる)。
- 各リスト内の順番はそのまま。
使用例(順番逆)
List<String> list1 = Arrays.asList("A", "B");
List<String> list2 = Arrays.asList("C", "D");
List<String> merged = ListUtils.mergeReversed(list1, list2);
System.out.println(merged); // [C, D, A, B]
Java