Как получить двойное среднее значение в коллекции объектов, содержащих байты, с помощью Stream API?

#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. Это не стоит того, чтобы использовать Байт