首页 > 解决方案 > 如何使用 Stream API 在具有字节的对象集合中获得双倍平均值?

问题描述

我有一个包含评论集合的员工实体,每个评论都有一个字节等级。

为简洁起见省略了不必要的细节

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

如何使用 Stream 获得 Employee 的平均成绩?

标签: javajava-stream

解决方案


Average 方法存在于某些特殊的 Stream 类中,您必须先转换为该类

OptionalDouble average = employee.getReviews().stream()
            .map(Review::getGrade)
            .filter(Objects::nonNull)
            .mapToInt(Byte::intValue)
            .average();

不要忘记也检查 null 。为方便起见,我还建议您使用 Integer 或 int 而不是 Byte。不值得使用 Byte


推荐阅读