Filtro e lista Modificar objeto usando java 8 fluxos

lukassz:

I'am usando primavera e I definido de feijão com ArrayList. invitesé uma lista com Inviteobjetos.

@Getter
public class Invite {

    private String invitee;
    private String email;
    private boolean confirm;
    private String token;
}

Esta é a minha classe privider dados:

@Getter
public class InvitationsData {

    private List<Invite> invites = new ArrayList<>();

    @PostConstruct
    private void initInvites(){
        invites.add(new Invite("John", "[email protected]", false, "6456453"));
        invites.add(new Invite("John", "[email protected]", false, "3252352"));
    }
}

Na classe de configuração que eu criei @Beana partir InvitationsData- ele funciona.

No serviço que eu gostaria de modificar um objeto da lista que corresponde a seqüência de token e ter definido confirma false.

invitationsData.getInvites()
               .stream()
               .filter(i -> token.equals(i.getToken()))
               .filter(i -> !i.isConfirm())
               .forEach(i -> {
                   i.setConfirm(true);
               });

Este fluxo funciona bem. Agora, quando o método alguém chamada duas vezes para o objeto confirmado que eu gostaria de jogar CustomException. Como posso fazer isso com esta corrente? Onde posso colocar orElseThrow?

EDITAR:

Minha solução atual. Eu uso peekem vez deforEach

invitationsData
                .getInvites()
                .stream()
                .filter(i -> token.equals(i.getToken()))
                .filter(i -> !i.isConfirm())
                .peek(i -> i.setConfirm(true))
                .findFirst()
                .orElseThrow(() -> new InvitationConfirmedException("Error"));
azro:
  • Se o tokené único você pode fazer:

    getInvites().stream()
                .filter(i -> token.equals(i.getToken()))
                .filter(i -> !i.isConfirm())
                .findAny()
                .orElseThrow(IllegalArgumentException::new)
                .setConfirm(true);
    
  • Se não :

    getInvites().stream()
                .filter(i -> token.equals(i.getToken()))
                .forEach(i -> {
                    if (i.isConfirm()) 
                        throw new CustomException();
                    else 
                        i.setConfirm(true);
                });
    

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=283338&siteId=1
Recomendado
Clasificación