Java | 複数の ArrayList をまとめて1つのリストに連結するユーティリティ関数

Java Java
スポンサーリンク

さらに高度なユーティリティ関数を作ってみましょう。ここでは 「特定の条件でグループ化」「Mapに変換」「nullや空文字を除外」 をテーマにしたバージョンを紹介します。


① 特定の条件でグループ化するバージョン

例えば「文字列の先頭文字ごとにグループ化」するような関数です。

import java.util.*;
import java.util.stream.Collectors;

public class ListUtils {
    @SafeVarargs
    public static <T, K> Map<K, List<T>> groupBy(
        java.util.function.Function<T, K> classifier,
        List<T>... lists
    ) {
        return Arrays.stream(lists)
            .filter(Objects::nonNull)
            .flatMap(List::stream)
            .collect(Collectors.groupingBy(classifier));
    }
}
Java

使用例

List<String> list1 = Arrays.asList("Apple", "Banana", "Avocado");
List<String> list2 = Arrays.asList("Blueberry", "Cherry");

Map<Character, List<String>> grouped = ListUtils.groupBy(s -> s.charAt(0), list1, list2);

System.out.println(grouped);
// {A=[Apple, Avocado], B=[Banana, Blueberry], C=[Cherry]}
Java

② Mapに変換するバージョン

例えば「文字列をキー、長さを値」に変換する関数です。

import java.util.*;
import java.util.stream.Collectors;

public class ListUtils {
    @SafeVarargs
    public static <T, K, V> Map<K, V> toMap(
        java.util.function.Function<T, K> keyMapper,
        java.util.function.Function<T, V> valueMapper,
        List<T>... lists
    ) {
        return Arrays.stream(lists)
            .filter(Objects::nonNull)
            .flatMap(List::stream)
            .collect(Collectors.toMap(keyMapper, valueMapper, (v1, v2) -> v1));
    }
}
Java

使用例

List<String> list1 = Arrays.asList("Apple", "Banana");
List<String> list2 = Arrays.asList("Cherry");

Map<String, Integer> map = ListUtils.toMap(s -> s, s -> s.length(), list1, list2);

System.out.println(map);
// {Apple=5, Banana=6, Cherry=6}
Java

③ nullや空文字を除外するバージョン

import java.util.*;

public class ListUtils {
    @SafeVarargs
    public static List<String> mergeExcludeNullOrEmpty(List<String>... lists) {
        List<String> result = new ArrayList<>();
        for (List<String> list : lists) {
            if (list != null) {
                for (String item : list) {
                    if (item != null && !item.isEmpty()) {
                        result.add(item);
                    }
                }
            }
        }
        return result;
    }
}
Java

使用例

List<String> list1 = Arrays.asList("Apple", "", null);
List<String> list2 = Arrays.asList("Banana", "Cherry");

List<String> merged = ListUtils.mergeExcludeNullOrEmpty(list1, list2);
System.out.println(merged); // [Apple, Banana, Cherry]
Java

💡 まとめ

  • グループ化groupBy を使って条件ごとにまとめる
  • Map変換toMap でキーと値を自由に設定
  • null/空文字除外 → フィルタを入れて安全に連結

👉 これらを組み合わせれば「条件付きでグループ化しつつ、重複を除外」「Mapに変換しながらフィルタ」など、柔軟なデータ処理が可能になります。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました