WT
Size: a a a
WT
AG
grep
WT
WT
Е
IR
IR
IR
IR
IR
AG
AK
A
boolean isRedeemable = details.getSuccess();
if (isFalse(isRedeemable))
{
// @formatter:off
isRedeemable = emptyIfNull(details.getErrors()).stream()
.noneMatch(error -> isFalse(allowedErrors.contains(error)));
// @formatter:on
}
return isRedeemable;
(allowedErrors).containsAll(details.getErrors())?
AG
IO
SK
B
, результат которого зависит от двух A
. И B
, и А
должны быть мемоизированны при первом обращении, и должна быть гарантия что вычисление каждого из doHeavyLifting
методов происходит не более одного раза, вне зависимости от того, где и сколько раз их вызвали. При этом клиентская сторона может потенциально вызвать их в рандомном порядке и конкуррентно (сэмулированно в мэйне). Если раннать мэйн из гиста, он будет виснуть с некоторой вероятностью (если B пойдет вычисляться раньше чем обе A, будет дэдлок на ConcurrentHashMapе, даже если тред один).