java 8如何使用集合流来检查对象的存在

rag*_*aga 2 collections java-8

我是java 8编程的新手,想知道使用streams()/ lambda重写下面的最佳方法是什么.

class Person {
  String name;
  int age;
  ...
}

public boolean checkPersonAboveAge(List<Person> persons, int age) {
    for (Person person : persons) {
       if (person.age > age) {
          return true;
       }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我试过:

public boolean checkPersonAboveAge(List<Person> persons, int age) {
    Person p = persons.stream().filter(p -> p.age > age).findAny().orElse(null);
    if (p != null) {
       return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我用lamdba读到了代码的可读性会有所提高,但是看看这个例子我要么没有正确使用这个功能,要么缺少一些东西.

Ous*_* D. 5

您当前的流尝试确实有效,但这是不常见的,而不是最好的方法.

  1. 您创建一个可立即丢弃的Optional对象.
  2. 代码不是那么紧凑.

相反,请使用anyMatch完全符合您要求的方法.

return persons.stream().anyMatch(p -> p.age > age);
Run Code Online (Sandbox Code Playgroud)