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

时间:2018-04-13 16:34:37

标签: collections java-8

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

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

到目前为止我试过了:

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

我用lamdba读到了代码的可读性会有所改善,但是看看这个例子我或者没有正确使用这个功能或者缺少某些东西。

1 个答案:

答案 0 :(得分:5)

您当前的流尝试确实有效,但这种情况并不常见,也不是最佳方式。

  1. 您创建一个可立即丢弃的可选对象。
  2. 代码不是那么紧凑。
  3. 相反,请使用anyMatch方法,该方法完全符合您的目标。

    return persons.stream().anyMatch(p -> p.age > age);