疲れたらやすむ

Javaを学ぶ上でハマったところを書いていきます。iPhoneアプリ開発や日常ネタもあるかも。

【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());

今回は以上になります。