【Java Stream API 超入門】filterメソッドでの絞り込みとmapメソッドによる要素の変換

こんにちは。大城です。
 
今回は、Java SE 8で追加されたStream APIについて、初心者向けに解説していきます。
 
今回は、絞り込みや要素の変換などを行う中間処理filtermapについて詳しく紹介していきたいと思います。

環境

OS
Windows10
Java
Java8

絞り込み(filter)

まずは要素の絞り込みを行うfilterメソッドについて説明します。
 
filterは、条件に合致した要素のみからなる新しいStreamを返却します。

class Person {

	private String name;

	private int age;

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}

public class Main {

	public static void main(String[] args) {

		List<Person> list = new ArrayList<Person>(Arrays.asList(new Person("taro", 21), new Person("jiro", 19), new Person("saburo", 18), new Person("hanako", 20)));
		
		// Streamの取得
		Stream<Person> stream = list.stream();

		// filterメソッドにより、ageが20以上の要素のみ抽出
		Stream<Person> stream2 = stream.filter(p -> p.getAge() >= 20);

		stream2.forEach(p -> System.out.println(p.getName()));
	}

}

実行結果
taro
hanako

今回もラムダ式を用いています。
 
->の左のpはPerson型の要素を受け取る引数となっており、右側にBooleanを返す処理を記述します。これによって、返り値がtrueなるpのみが残ったStreamが取得できます。
 
今回の例では、p.getAge() >= 20となるp、つまり年齢が20歳以上の人が抽出され、Streamが作られています。
 
このように、filterメソッドでは、条件による抽出という動作を1行のみでわかりやすく記述することができます。

要素の変換(map)

続いてmapメソッドについて説明します。まずは例をご覧ください。

class Person {

	private String name;

	private int age;

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}

public class Main {

	public static void main(String[] args) {

		List<Person> list = new ArrayList<Person>(Arrays.asList(new Person("taro", 21), new Person("jiro", 19), new Person("saburo", 18), new Person("hanako", 20)));

		// Streamの取得
		Stream<Person> stream = list.stream();

		// mapメソッドにり、PersonのStreamからStringのStreamに変換
		Stream<String> stream2 = stream.map(p -> p.getName());

		stream2.forEach(p -> System.out.println(p));
	}

}

実行結果
taro
jiro
saburo
hanako

mapメソッドでは、元の型の処理を受け取って返り値を返す処理を記述することで、その型のStreamが取得できます。
 
例ではPersonのStreamからStringのStreamに変換し、名前だけを抽出しています。p.getName()の部分を他の値を返す処理に変えれば別のStreamを取得することもできます。

まとめ

いかがでしたか。
 
filterメソッドは、条件による要素の抽出を1行で記載でき、mapメソッドは要素の変換を1行で記載できます。いずれも、処理後にどんなStreamが取得できるのかがわかりやすくなっています。
 
次回以降では、このほかの中間処理メソッドについても解説していこうと思います。
 
それでは、また。
 
 
 
 
《関連記事》

記事をシェア
MOST VIEWED ARTICLES