Buenas,
El problema que tiene el compilador es la diferencia de ambitos entre la closure y el metodo que la contiene.
Las variables locales de un metodo se almacenan en una seccion de memoria llamada pila(stack) mientras que la closure se guarda en el heap. El caso es que la closure podria ejecutarse cuando el ambito de la pila haya terminado y la variable no este disponible o bien haya cambiado de valor. Por eso el compilador requiere declararla final, para asegurarse de que estara disponible y sin cambios cuando se utilice internamente.
Encuentro superrebuscado tu algoritmo, pero en cualquier caso se deberia solucionar el error de esta manera:
Código Java:
Ver originalfor(int i=0;i<autores.length;i++){
final String autorBuscado
= autores
[i
]; refs.entrySet().stream().forEach((cadena) -> {
Registro valor=cadena.getValue();
int idFil;
for(int j=0;j<valor.autores.size();j++){
if(valor.autores.get(j).equals(autorBuscado )){
idFil
=Arrays.
binarySearch(filiaciones,valor.
filiaciones.
get(j
)); ps3.println((i+1)+","+(idFil+1));}
}
});
}
Un saludo