Добавить объект в список после OrElse

#java #lambda

Вопрос:

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

Я пытаюсь записать объект в список, если он не существует в OrElse, но он не добавляется в список. Есть ли какой-нибудь способ сделать это?

Комментарии:

1. Где бы ваш код попытался добавить что-либо в список? orElse() вернет значение по умолчанию, но добавления не будет. Предполагая getInscricaoTipoTrabalhoAvaliadorQuestoes() , что возвращает этот список, вы можете использовать что-то вроде orElseGet(() -gt; { var x = new InscricaoTipoTrabalhoAvaliadorQuestao(eventoQuestao, inscTipoTrabAval); getInscricaoTipoTrabalhoAvaliadorQuestoes().add(x); return x;})

2. Было бы хорошей идеей просто разбить это на два или более утверждений

Ответ №1:

Проще всего сохранить список в переменной и проверить содержимое вашего дополнительного

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

Если вы используете Java 8, вы можете использовать if блок

 Optionallt;InscricaoTipoTrabalhoAvaliadorQuestaogt; value = list.stream()  .filter(aq -gt; 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); }