Вы должны убедиться, что переменная lo c никогда не изменится после объявления.
Это будет работать:
while(flag==false){
int loc=Collections.min(sticks);
result[k++]=sticks.size();
sticks.removeIf(f -> (f==loc));
sticks.replaceAll(g ->(g-loc));
}
Это не будет:
int loc = -1;
while(flag==false){
loc=Collections.min(sticks);
result[k++]=sticks.size();
sticks.removeIf(f -> (f==loc));
sticks.replaceAll(g ->(g-loc));
}
Компилятор не знает, когда будет выполнена лямбда, поэтому он должен знать во время компиляции, как разрешить все переменные.
В первом случае lo c переменная назначается только один раз, поэтому компилятор может использовать ее для связывания. Во втором случае одна и та же переменная lo c назначается несколько раз, поэтому компилятор не может скомпилировать лямбда-функцию.