@ Ответ AndyTurner верен, однако я хочу объяснить, почему вы не можете делать то, что пытались.
Лямбда может видеть переменные в содержащей области только в том случае, если они помечены как окончательные (или фактически являются окончательными).
Ваш String str
по сути является окончательным, но вы не можете пометить boolean flag
как окончательный, потому что хотите, чтобы ваша лямбда его изменила.
Один из способов обойти это - использовать окончательный AtomicBoolean
вместо вашего boolean flag
. Затем вы можете вызвать set()
в AtomicBoolean, чтобы изменить содержащееся в нем значение.