public class Main { public static void main(String[] args) { List<Person> persons = Arrays.asList( new Person("Alice", 25, true), new Person("Bob", 30, false), new Person("Charlie", 35, true), new Person("David", 40, true) ); int sum = persons.stream().filter(person -> person.getAge() != null) .filter(Person::isConditionMet) .mapToInt(Person::getAge) .sum(); System.out.println("Sum of ages: " + sum);当age字段全部是null,sum最终结果是多少
时间: 2024-04-08 07:34:55 浏览: 93
如果`age`字段全部为`null`,那么在调用`mapToInt(Person::getAge)`时会返回一个不包含任何元素的`IntStream`,因为没有可映射的整数值。
在这种情况下,调用`sum()`方法将返回默认值0,因为没有元素进行求和。所以最终结果将是0。
以下是修改后的代码示例:
```java
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(
new Person("Alice", null, true),
new Person("Bob", null, false),
new Person("Charlie", null, true),
new Person("David", null, true)
);
int sum = persons.stream()
.filter(person -> person.getAge() != null)
.filter(Person::isConditionMet)
.mapToInt(Person::getAge)
.sum();
System.out.println("Sum of ages: " + sum);
}
static class Person {
private String name;
private Integer age;
private boolean condition;
public Person(String name, Integer age, boolean condition) {
this.name = name;
this.age = age;
this.condition = condition;
}
public Integer getAge() {
return age;
}
public boolean isConditionMet() {
return condition;
}
}
}
```
在这个示例中,我们将年龄字段改为`Integer`类型,允许其为`null`。当`age`字段全部为`null`时,最终结果将是0。
阅读全文