【Java】Listから特定の要素を抽出し新規Listを作成
今回は独自クラスのListから特定の条件で要素を抽出し、抽出されたものから新しいListを作成します。
前提としてJava8であること。
まずは独自クラス。
Human.java
public class Human { String name; String gender; int age; public Human(String name, String gender, int age) { this.name = name; this.gender = gender; this.age = age; } }
このHumanクラスのListを定義し、ある条件で新しいHumanクラスを作ります。
具体的には、男女混合のHumanクラスをListを作成した上でそのListからgenderが男だけのListを新規生成します。
実装はこんな感じです。
Main.java
import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { final String MAN = "男"; List<Human> humanList = new ArrayList<Human>(); Human human1 = new Human("太郎", "男", 15); humanList.add(human1); Human human2 = new Human("花子", "女", 17); humanList.add(human2); Human human3 = new Human("慎吾", "男", 22); humanList.add(human3); // humanListから「gender=男」を条件に新しいリストを作成 List<Human> manList = humanList.stream().filter(human -> MAN.equals(human.gender)) .collect(Collectors.toList()); for (Human human : manList) { System.out.print("名前 = " + human.name); System.out.print(", 性別 = " + human.gender); System.out.print(", 年齢 = " + human.age); System.out.println(); } } }
実行結果
名前 = 太郎, 性別 = 男, 年齢 = 15 名前 = 慎吾, 性別 = 男, 年齢 = 22
filter()の中に条件を指定し、抽出できたHumanクラスからCollectors.toList()でListを作成しています。
今回は抽出条件をgenderの値が男である場合にしていますが、複数条件にすることももちろん可能です。
例えば以下のようにすればgenderが男、かつageが20以上の条件で抽出します。
List<Human> manList = humanList.stream().filter(human -> MAN.equals(human.gender) && 20 <= human.age)
.collect(Collectors.toList());
今回は以上になります。