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

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

findAnyメソッドで任意の要素を取得します。findAnyメソッドの戻り値はOptional<T>です。

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

取得出来たかどうかを確認するにはisPresentメソッドを使用します。

List<Employee> list = new ArrayList<Employee>(); // 要素をaddしていない
Optional<Employee> emp = list.stream().findAny();
emp.get(); // NoSuchElementExceptionが発生する

要素がない場合はgetメソッドで取得した場合にNoSuchElementExceptionが発生します。

その為、isPresentメソッドで要素が取得できたか確認したほうが良いです。

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().findAny();
if(emp.isPresent()) { // 存在する値がある場合はtrueを返し、それ以外の場合はfalseを返す
  System.out.println(emp.get().getName() + " : " + emp.get().getAge());
} else {
  System.out.println("no such element.");
}

findAnyメソッドは任意の要素を返すので、必ずしも同じ要素が返るとは限らないです。

コメント

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