Home > OS >  Add Object to List after orElse
Add Object to List after orElse

Time:11-24

inscTipoTrabAval.getInscricaoTipoTrabalhoAvaliadorQuestoes()
    .stream()
    .filter(aq -> aq.getEventoQuestao().equals(eventoQuestao))
    .findFirst()
    .orElse(new InscricaoTipoTrabalhoAvaliadorQuestao(eventoQuestao, inscTipoTrabAval))
    .setJustificativa(justificativa);

I'm trying to write an object into a list if it doesn't exist with orElse, but it isn't adding to the list. Is there any way to do this?

CodePudding user response:

The easiest is to store the list in a variable, and check the content of your optional

//assuming the list is not immutable
List<InscricaoTipoTrabalhoAvaliadorQuestao> list = inscTipoTrabAval.getInscricaoTipoTrabalhoAvaliadorQuestoes();
list.stream()
    .filter(aq -> aq.getEventoQuestao().equals(eventoQuestao))
    .findFirst()
    .ifPresentOrElse(
        existing -> existing.setJustificativa(justificativa),
        () -> {
            var value = new InscricaoTipoTrabalhoAvaliadorQuestao(eventoQuestao, inscTipoTrabAval));
            value.setJustificativa(justificativa);
            list.add(value);
        }
    );

If you're on Java 8, you can use an if block

Optional<InscricaoTipoTrabalhoAvaliadorQuestao> value = list.stream()
    .filter(aq -> aq.getEventoQuestao().equals(eventoQuestao))
    .findFirst()

if(value.isPresent()) {
    value.get().setJustificativa(justificativa);
} else {
    InscricaoTipoTrabalhoAvaliadorQuestao newValue = new InscricaoTipoTrabalhoAvaliadorQuestao(eventoQuestao, inscTipoTrabAval));
    newValue.setJustificativa(justificativa);
    list.add(newValue);
}
  • Related