Java 使用stream 中的ifPresent 同时赋值多个字段
时间: 2024-10-03 07:01:02 浏览: 103
在Java中,Stream API提供了一种简洁的方式来处理集合数据。`ifPresent()`是一个消费者操作符,它用于对流中的每个元素应用一个动作,如果元素存在,则执行动作。如果你想同时检查并赋值给多个字段,可以将多个条件和赋值操作合并在一起。
例如,假设你有一个Person对象的流,你想找到所有年龄大于18并且有工作的Person,你可以这样做:
```java
List<Person> people = ...; // 假设这是一个Person对象的列表
people.stream()
.filter(person -> person.getAge() > 18 && person.isEmployed()) // 过滤条件
.ifPresent(person -> { // 如果某个person满足条件
person.setSomeProperty(value); // 赋值操作1
person.setAnotherProperty(anotherValue); // 赋值操作2
});
```
在这个例子中,`ifPresent()`会接收一个消费函数,当过滤后的流中有元素时,这个函数会被调用,从而更新对应的Person对象。
相关问题
List<SenicAppraise>其中SenicAppraise有多个double字段,求这个list平均值,并赋值到新的SenicAppraise,使用sream
在Java中,你可以使用Stream API来计算List<SenicAppraise>中所有SenicAppraise对象的double字段的平均值,并将结果存储在一个新的SenicAppraise对象中。首先假设`SenicAppraise`类有一个名为`value`的double类型的字段。以下是如何操作:
```java
// 假设getAverageValue()方法用于获取该对象的某个double字段的平均值
// 并假设列表不为空
List<SenicAppraise> appraisals = ...;
// 使用流处理
Optional<Double> average = appraisals.stream()
.map(SenicAppraise::getAverageValue) // 获取每个对象的值
.average(); // 计算平均值
if (average.isPresent()) {
SenicAppraise newAppraisal = new SenicAppraise();
newAppraisal.setValue(average.getAsDouble()); // 将平均值赋值给新对象
} else {
System.out.println("列表为空或没有可计算平均值的数据");
}
```
阅读全文
相关推荐











