Java8のStream API findFirstメソッドで一番最初の要素を取得する

Java8のStream API findFirstメソッドで一番最初の要素を取得する

findFirstメソッドで最初に取得できた要素を取得します。条件に一致する要素が複数の場合、Streamから順序が最も前にある要素を返します。

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;
  }
}

Employeeのリストを作成して、一番最初の要素をfindFirstメソッドで取得します。findFirstメソッドの戻り値はOptional<T>です。

List<Employee> list = new ArrayList<Employee>();

list.add(new Employee("tanaka", 44));
list.add(new Employee("takahashi", 40));
list.add(new Employee("minami", 30));
list.add(new Employee("higashiguchi", 32));
list.add(new Employee("adachi", 200));
list.add(new Employee("rasubosu", 25));

Optional<Employee> emp = list.stream().findFirst();
emp.ifPresent(e -> System.out.println(e.getName() + " : " + e.getAge()));

ifPresentメソッドはConsumerを引数に取り、要素が存在する場合のみConsumerをその要素で呼び出してくれます。

empに要素が存在しない場合、Consumerは動作しません。Consumerのacceptメソッドは引数が一つあり、戻り値がありません。

関数型インタフェースConsumer

@FunctionalInterface
public interface Consumer<T> {
  void accept(T t);
}

findFirstメソッドのほかにfindAnyメソッドがあります。

以下はOptionalクラスのifPresentメソッドです。valueがnullでなければConsumer#acceptメソッドが実行されます。nullの場合acceptメソッドが呼ばれないようになっています。

public void ifPresent(Consumer<? super T> consumer) {
  if (value != null)
    consumer.accept(value);
}

Java8のStream API findAnyメソッドで任意の要素を取得する

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました