我正在使用Spring框架,并定义了一个带有ArrayList
的Bean。 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"));
}
}
在配置类中,我创建了一个来自InvitationsData的@Bean - 它可以工作。
在服务中,我想修改列表中与令牌字符串匹配并将confirm设置为false的一个对象。
invitationsData.getInvites()
.stream()
.filter(i -> token.equals(i.getToken()))
.filter(i -> !i.isConfirm())
.forEach(i -> {
i.setConfirm(true);
});
这个流运行良好。现在,当有人两次调用确认对象的方法时,我想抛出CustomException
。如何在这个流中实现?我应该在哪里使用orElseThrow
?
编辑:
我的当前解决方案。我使用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"));
forEach
内部。 - Adam Siemion