Проблема со средним потоком maptostream, если все элементы равны нулю - PullRequest
2 голосов
/ 23 сентября 2019

У меня проблема со следующей строкой, она напрямую переходит к исключению, если все значения равны нулю, не должно ли она возвращать 0?

Double avgTemperature = temp.stream()
       .filter(o -> o != null)
       .mapToDouble(EnvironmentData::getTemperature)
       .average()
       .getAsDouble();

1 Ответ

3 голосов
/ 23 сентября 2019

getAsDouble() выдаст NoSuchElementException, если OptionalDouble пусто.

Используйте orElse, чтобы указать значение по умолчанию:

double avgTemperature = temp.stream().filter(o -> o != null).mapToDouble(EnvironmentData::getTemperature).average().orElse(0.0);

Обратите внимание, что если getTemperature() возвращает ссылочный тип, и он может возвращать null, вам также следует отфильтровать эти null значения:

double avgTemperature = 
    temp.stream()
        .filter(o -> o != null && o.getTemperature() != null)
        .mapToDouble(EnvironmentData::getTemperature)
        .average()
        .orElse(0.0);
...