Java | 配列(Array)と ArrayList の違い

Java Java
スポンサーリンク

では、最後に 条件付きで連結するユーティリティ を作ります。
これで「複数の配列やリストをまとめるけど、条件に合うものだけ連結する」ことができます。


1. 条件付き連結ユーティリティ

import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.Predicate;

public class ConcatUtilFiltered {

    // ----------------------------
    // 配列版(条件付き)
    // ----------------------------
    @SafeVarargs
    public static <T> T[] concatAllFiltered(Predicate<T> condition, T[]... arrays) {
        // 一旦ArrayListに格納して条件をフィルタ
        ArrayList<T> temp = new ArrayList<>();
        for(T[] arr : arrays) {
            for(T element : arr) {
                if(condition.test(element)) {
                    temp.add(element);
                }
            }
        }

        // 結果配列を作成(最初の配列と同じ型)
        if(arrays.length == 0) return null;
        @SuppressWarnings("unchecked")
        T[] result = Arrays.copyOf(arrays[0], temp.size());
        for(int i = 0; i < temp.size(); i++) {
            result[i] = temp.get(i);
        }
        return result;
    }

    // ----------------------------
    // ArrayList版(条件付き)
    // ----------------------------
    @SafeVarargs
    public static <T> ArrayList<T> concatAllFiltered(Predicate<T> condition, ArrayList<T>... lists) {
        ArrayList<T> result = new ArrayList<>();
        for(ArrayList<T> list : lists) {
            for(T element : list) {
                if(condition.test(element)) {
                    result.add(element);
                }
            }
        }
        return result;
    }

    // ----------------------------
    // 使用例
    // ----------------------------
    public static void main(String[] args) {
        // 配列
        String[] classA = {"田中", "佐藤"};
        String[] classB = {"鈴木", "高橋"};
        String[] classC = {"伊藤", "田村"};

        // 名前に「田」が入っている人だけ連結
        String[] filteredArray = concatAllFiltered(
            name -> name.contains("田"), 
            classA, classB, classC
        );
        System.out.println("条件付き配列連結結果:");
        for(String name : filteredArray) System.out.println(name);

        System.out.println();

        // ArrayList
        ArrayList<String> listA = new ArrayList<>(Arrays.asList("田中","佐藤"));
        ArrayList<String> listB = new ArrayList<>(Arrays.asList("鈴木","高橋"));
        ArrayList<String> listC = new ArrayList<>(Arrays.asList("伊藤","田村"));

        ArrayList<String> filteredList = concatAllFiltered(
            name -> name.contains("田"),
            listA, listB, listC
        );
        System.out.println("条件付きArrayList連結結果:");
        for(String name : filteredList) System.out.println(name);
    }
}
Java

2. 実行結果イメージ

条件付き配列連結結果:
田中
田村

条件付きArrayList連結結果:
田中
田村

3. ポイント

  1. Predicate を使って条件を柔軟に指定
  2. 配列版・ArrayList版の両方に対応
  3. 複数配列・複数リストを一度にまとめて条件付きで連結可能
  4. 実務で「特定条件だけをまとめたい」場合に便利

💡 初心者向けまとめ

  • 配列・ArrayList どちらでも 条件付き連結 が可能
  • Predicate を変えるだけで、フィルタ条件を自由に変更できる
  • 「連結+フィルタ」を一度に行うので、コードがスッキリする
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました