#java #java-stream
Вопрос:
У меня есть организация-сотрудник, у которой есть коллекция отзывов, каждый отзыв имеет оценку в байтах.
Ненужные детали опущены для краткости
@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?
Ответ №1:
Средний метод существует в некоторых специальных потоковых классах, вы должны сначала привести к этим классам
OptionalDouble average = employee.getReviews().stream()
.map(Review::getGrade)
.filter(Objects::nonNull)
.mapToInt(Byte::intValue)
.average();
Не забудьте также проверить значение null.
Я также рекомендую для удобства использовать Integer или int вместо Byte. Это не стоит того, чтобы использовать Байт