У этого сообщения уже есть проверенный ответ, но ответ не фильтрует для нулевых значений. Правильный ответ должен предотвращать пустые значения, используя функцию Object :: nonNull как предикат.
BigDecimal result = invoiceList.stream()
.map(Invoice::total)
.filter(Objects::nonNull)
.filter(i -> (i.getUnit_price() != null) && (i.getQuantity != null))
.reduce(BigDecimal.ZERO, BigDecimal::add);
Это предотвращает попытку суммирования нулевых значений по мере уменьшения.