java - 如何使用 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 的平均成绩?
解决方案
Average 方法存在于某些特殊的 Stream 类中,您必须先转换为该类
OptionalDouble average = employee.getReviews().stream()
.map(Review::getGrade)
.filter(Objects::nonNull)
.mapToInt(Byte::intValue)
.average();
不要忘记也检查 null 。为方便起见,我还建议您使用 Integer 或 int 而不是 Byte。不值得使用 Byte
推荐阅读
- javascript - 我可以看更少的文件更改并通过 webpack 将其转换为 css 文件吗?
- android - Android Lint 未检测到 UnusedAttribute
- flutter - 行内溢出问题。装箱没用
- postgresql - “Int 类型的变量邀请 ID!用于期望 Int_comparison_exp 的位置”
- reactjs - 如何使用从 .scss 文件导出的变量来创建 Material-UI 主题?
- azure - 我怎样才能通过我的 API 网关?(AKS)
- python - 熊猫公历日期到朱利安
- r - 将值附加到 R 中列表的子列表的最佳方法是什么?
- python - json.load 和 json.loads 无法加载 JSON 文件数据,Python
- java - KafkaStreams Scala 在 2 个字段上分组以获得不同的计数