【发布时间】:2019-01-16 22:26:00
【问题描述】:
我正在使用 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里面 -
@azro 令牌是唯一的
标签: java java-stream