Vavr Match
остановится на первом совпадении Case
и вернет соответствующее значение.
То, что вы испытываете, - это просто стандартное поведение Java.Аргументы с нетерпением оцениваются перед передачей в метод, поэтому, когда вы пишете
Case(Pattern, retValExpression)
и retValExpression
является выражением, выражение retValExpression
будет с нетерпением оценено до того, как дажепередавая его фабричному методу API.Case
.Если вы хотите, чтобы выражение retValExpression
было лениво , вычисляемое только при совпадении Case
, вам необходимо преобразовать его в Supplier
, создав лямбда-выражение:
Case(Pattern, () -> retValExpression)
В этом случае лямбда-выражение () -> retValExpression
будет оцениваться только при совпадении соответствующего Case
.
Если ваша проблема заключается в том, что выражения Pattern
получают с нетерпением, вы можете применить то же самоеТехника для преобразования их в ленивую оценку, предоставляя лямбду для Predicate
:
Case($(value -> test(value)), () -> retValExpression)