java stream findfirst null pointer exception

在使用Java Stream中的findFirst方法时,如果在Stream中没有找到匹配的元素,则该方法返回一个Optional对象,该对象可以为空(null)。因此,如果您尝试在空Optional对象上调用方法,可能会触发NullPointerException异常。

为了避免这种情况,您可以使用orElse或orElseGet方法来提供默认值,以便在Optional对象为空时返回一个非空值。例如,假设您有一个包含Person对象的列表,您想要找到年龄大于18岁的第一个人:

List<Person> people = ...;
Person adult = people.stream()
    .filter(p -> p.getAge() > 18)
    .findFirst()
    .orElse(null);

在这个例子中,如果没有找到匹配的人,则findFirst方法将返回一个空的Optional对象。在这种情况下,orElse方法将返回null,而不是抛出NullPointerException异常。

另外,您也可以使用ifPresent方法来检查Optional对象是否为空,如果不为空则执行指定的操作。例如:

people.stream()
    .filter(p -> p.getAge() > 18)
    .findFirst()
    .ifPresent(p -> System.out.println("Found an adult: " + p.getName()));

这里,如果找到匹配的人,则ifPresent方法将执行指定的lambda表达式,并输出找到的人的姓名。如果没有找到匹配的人,则不会执行任何操作。

总之,在使用Java Stream中的findFirst方法时,请注意检查Optional对象是否为空,并考虑提供默认值或使用ifPresent方法来避免NullPointerException异常。

  •