#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); }