How to resolve Variable in lambda expression should be final or effectively final in forEach Java 8

Publicado em: 30 Novembro 2022
no canal de: smashplus
920
4

I want to limit the number of values in an ArrayList in the below code

newExam.getQuestionList().stream().forEach(qtn- >{
String title=qtn.getOption1();
if(qtn.getCorrectOptionIndex()==2){
title=qtn.getOption2();
}else if(qtn.getCorrectOptionIndex()==3){
title=qtn.getOption3();
}


dragDropEntities.add(new DragDropEntity(qtn.getId().getQtnId(), title, qtn.getImage()));



I decided to use this way,

int i = 0;
list.stream.forEach(item -> {
i++;
});
but this gives me the error "Variable used in lambda expression should be final or effectively final"

Because this variable I is incrementing inside lambda expression it is not final so this gives the above error.

So I fixed this by using the AtomicInteger in the below way,

AtomicInteger atomicInteger=new AtomicInteger();
newExam.getQuestionList().stream().forEach(qtn->{
String title=qtn.getOption1();
if(qtn.getCorrectOptionIndex()==2){
title=qtn.getOption2();
}else if(qtn.getCorrectOptionIndex()==3){
title=qtn.getOption3();
}
if(atomicInteger.getAndIncrement()<6) {
dragDropEntities.add(new DragDropEntity(qtn.getId().getQtnId(), title, qtn.getImage()));
}


}
);
This solves the issue and I can see the list correctly with six elements


Nesta página do site você pode assistir ao vídeo on-line How to resolve Variable in lambda expression should be final or effectively final in forEach Java 8 duração hora minuto segundo em boa qualidade , que foi baixado pelo usuário smashplus 30 Novembro 2022, compartilhe o link com seus amigos e conhecidos, no youtube este vídeo já foi visto 920 vezes e gostou 4 espectadores. Boa visualização!