Я использую весну, и я определил боб с ArrayList
. invites
это список с Invite
объектами.
@Getter
public class Invite {
private String invitee;
private String email;
private boolean confirm;
private String token;
}
Это мой класс привилегированных данных:
@Getter
public class InvitationsData {
private List<Invite> invites = new ArrayList<>();
@PostConstruct
private void initInvites(){
invites.add(new Invite("John", "john@john.com", false, "6456453"));
invites.add(new Invite("John", "john@john.com", false, "3252352"));
}
}
В классе конфигурации я создал @Bean
из InvitationsData
- все работает.
В сервисе я хотел бы изменить один объект из списка, который соответствует строке токена и для confirm
установлено значение false
.
invitationsData.getInvites()
.stream()
.filter(i -> token.equals(i.getToken()))
.filter(i -> !i.isConfirm())
.forEach(i -> {
i.setConfirm(true);
});
Этот поток работает нормально. Теперь, когда кто-то дважды вызывает метод для подтвержденного объекта, я хотел бы бросить CustomException
. Как я могу сделать это с этим потоком? Где можно поставить orElseThrow
?
EDIT:
Мое текущее решение. Я использую peek
вместо forEach
invitationsData
.getInvites()
.stream()
.filter(i -> token.equals(i.getToken()))
.filter(i -> !i.isConfirm())
.peek(i -> i.setConfirm(true))
.findFirst()
.orElseThrow(() -> new InvitationConfirmedException("Error"));