Start here. This is the direct spoken answer to practice first.
Overview
The restriction applies to reassigning the local variable, not to every object reachable through its captured reference.
A lambda can capture a local variable only if it is final or effectively final, meaning the variable is assigned once and never reassigned. The lambda captures the local value, and it may run after the method's stack frame has returned, so Java avoids mutable shared local-variable slots with unclear lifetime and visibility. A captured object reference may still point to a mutable object. The restriction prevents reassigning the local variable, not mutating that object.