Java8のStream API mapメソッドを理解するにはFunctionインタフェースを理解する

Java8のStream API mapメソッドを理解するにはFunctionインタフェースを理解する

Functionインタフェースを理解すればmapの動きが理解しやすいと思います。

java.util.function.Functionインタフェースは関数型インタフェースと呼ばれるインタフェースで、applyメソッド一つだけを持っています。

TとRを持ち、applyメソッドは仮引数にT,戻り値がRとなります。

Employeeクラスがあるとします。

public class Employee {
private String name;
private int age;
public Employee(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;
}
}

view raw
Employee
hosted with ❤ by GitHub

mapの引数はFunctionなので、匿名クラスを作成してみます。applyメソッドが返すのはここでは固定の文字列としています。TがEmployee型、RがString型です。

上記からapplyメソッドは仮引数を変換処理したりして、別の型で返すことができることがわかります。

list変数はEmployeeインスタンスのリストですが、mapメソッドを使用することによって、Stream<String>(ここではList<String>にしている)に変換できていることがわかります。こういった変換処理をする場合にmapメソッドを使用します。

ちなみに関数型インタフェースは匿名クラスである必要はありません。以下のように定義することも可能です。

ラムダ式で書く

ラムダ式で書くと以下のように記述できます。

このラムダ式は、Functionインタフェースがapplyメソッド一つしか持たない為、applyメソッドを呼んでいるのと同じ意味になります。メソッド名もreturnも{}も省略しているだけです。

ここではapplyメソッドの仮引数はEmployeeで、戻り値がStringになっているので、eがEmployeeの仮引数、e.getName().toUpperCase()はString型です。

Java8のStream API filterメソッドを理解するにはPredicateインタフェースを理解する

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA