You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Stream API计算员工Review集合中Byte评分的Double类型平均值

解决方案

前置注意事项

  • 因为Employee实体的reviews关联配置为FetchType.LAZY懒加载,计算前请确保代码运行在持久化上下文环境中,否则会抛出懒加载异常
  • 下方代码做了全链路空值防护,兼容reviews为null、集合中存在null的Review对象、grade字段为null的各类边界场景

代码实现

你可以直接在Employee类中添加获取平均评分的方法:

import java.util.Objects;
import java.util.OptionalDouble;

@Entity
public class Employee extends AbstractBaseEntity {
    @OneToMany( mappedBy = "employee",  cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
    private List<Review> reviews;

    // 新增获取平均评分方法
    public Double calculateAverageGrade() {
        if (this.reviews == null || this.reviews.isEmpty()) {
            // 无有效评分时的返回值可根据业务需求调整,也可以返回null
            return 0.0;
        }
        OptionalDouble averageOpt = reviews.stream()
                // 过滤集合中为null的Review对象
                .filter(Objects::nonNull)
                // 提取评分字段
                .map(Review::getGrade)
                // 过滤为null的评分值
                .filter(Objects::nonNull)
                // 转为数值流计算平均值
                .mapToDouble(Byte::doubleValue)
                .average();
        // 无有效评分时的兜底返回,可根据业务调整
        return averageOpt.orElse(0.0);
    }

    // 原有getter、setter
}

如果业务要求没有有效评分时返回null,将最后一行返回值替换为:
return averageOpt.isPresent() ? averageOpt.getAsDouble() : null;

内容的提问来源于stack exchange,提问作者user15599360

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:06:02