É possivel passar esse for para lambda?

Opa pessoal tudo bem?, estou tentando passar esse for para lambda mas não estou conseguindo, alguem consegue me auxiliar? é que o lambda ainda não ficou claro na minha mente.

if(!treatment.getEmails().isEmpty()){
            for(EmailTreatment emailTreatment: treatment.getEmails()){
                if(emailTreatment.getEmail().equals(email.getEmail())){
                    throw new EmailTreatmentException();
                }
            }
        }

Consegui! segue resposta caso alguém precise

if(!treatment.getEmails().isEmpty()) treatment.getEmails().stream().forEach(i → { if(i.getEmail().equals(email.getEmail())) throw new EmailTreatmentException();});

1 curtida

Oi @natanmedeiros099

Você conseguiu usar lambda no código mas não teve muita vantagem nesse caso. Há algumas coisas estranhas no seu código que poderiam ser melhoradas:

  • Não é preciso testar se uma lista é vazia antes de iterar nela.
  • A variável email ter um método getEmail() é bem confuso
  • Chamar .stream() numa lista e depois chamar .forEach não é necessário. Pode chamar .forEach direto na lista

Isso são coisas mais básicas pra consertar. A melhoria mais importante é que você não precisa fazer um forEach + if para procurar um elemento numa lista.
Se entendi a lógica, se dentro de treament.getEmails() tiver o email email.getEmail() você quer lançar uma exceção certo?
Dá pra utilizar os métodos da api stream pra isso:

   if (treaments.getEmails().stream().anyMatch(e -> e.equals(email.getEmail()))) {
      throw new EmailTreatmentException();
    } 
2 curtidas