Конструкция Javaslang / Vavr, которую вы ищете, является конструкцией для понимания , которая доступна с помощью методов API.For
.
import javaslang.control.Try;
import static javaslang.API.For;
...
For(amountTry, currencyTry)
.yield(Amount::of)
.forEach(sale::setAmount);
То есть, если оба amountTry
и currencyTry
не являются пустыми, он создает Iterable
, получая значение результата для перекрестного произведения двух итераций и выполняя действие для каждого из полученных элементов, вызывая Consumer
. Вот то же самое в лямбда-форме с явными типами ввода, если это поможет вам лучше понять это:
For(amountTry, currencyTry)
.yield((BigDecimal amount, Currency currency) -> Amount.of(amount, currency))
.forEach((Amount amount) -> sale.setAmount(amount));
Более поздние версии библиотеки имеют перегрузки для понимания для Try
, которые возвращают Try
экземпляр вместо Iterable
, что делает API немного лучше, если вы хотите остаться в Try
домене.