では、最後に 条件付きで連結するユーティリティ を作ります。
これで「複数の配列やリストをまとめるけど、条件に合うものだけ連結する」ことができます。
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);
}
}
Java2. 実行結果イメージ
条件付き配列連結結果:
田中
田村
条件付きArrayList連結結果:
田中
田村
3. ポイント
- Predicate を使って条件を柔軟に指定
- 配列版・ArrayList版の両方に対応
- 複数配列・複数リストを一度にまとめて条件付きで連結可能
- 実務で「特定条件だけをまとめたい」場合に便利
💡 初心者向けまとめ
- 配列・ArrayList どちらでも 条件付き連結 が可能
Predicateを変えるだけで、フィルタ条件を自由に変更できる- 「連結+フィルタ」を一度に行うので、コードがスッキリする
