Выполнив те же самые операции, сначала отфильтруйте значения (вам нужны только значения больше 20).Затем умножьте эти значения на 0.9
и, наконец, уменьшите условия, выполнив сложение.Например,
BigDecimal TWENTY = BigDecimal.valueOf(20);
BigDecimal POINT9 = BigDecimal.valueOf(0.9);
System.out.println("Total of reduced numbers: " + numbers.stream()
.filter(x -> x.compareTo(TWENTY) > 0)
.map(x -> x.multiply(POINT9)).reduce((a, b) -> a.add(b)).get());
Выходы (в соответствии с запросом)
Total of reduced numbers: 47.7
И, как предлагается в комментариях, мы можем еще больше улучшить это с помощью ссылки на метод, и использование orElse
будет безопаснеечем сырой get()
.Мол,
System.out.println("Total of reduced numbers: " + numbers.stream()
.filter(x -> x.compareTo(TWENTY) > 0)
.map(x -> x.multiply(POINT9))
.reduce(BigDecimal::add)
.orElse(BigDecimal.ZERO));