使用Java8流过滤和修改列表对象
我使用的是spring,我用使用Java8流过滤和修改列表对象,java,java-stream,Java,Java Stream,我使用的是spring,我用ArrayList定义了bean邀请这是一个包含邀请对象的列表 @Getter public class Invite { private String invitee; private String email; private boolean confirm; private String token; } 这是我的数据私有类: @Getter public class InvitationsData { privat
ArrayList
定义了bean<代码>邀请这是一个包含邀请
对象的列表
@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"));
}
}
这条小溪很好用。现在,当有人为确认对象调用两次方法时,我想抛出CustomException
。如何使用此流执行此操作?我可以把或放在哪里
编辑:
我目前的解决方案。我使用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"));
- 如果
令牌
是唯一的,您可以执行以下操作:
getInvites().stream()
.filter(i -> token.equals(i.getToken()))
.filter(i -> !i.isConfirm())
.findAny()
.orElseThrow(IllegalArgumentException::new)
.setConfirm(true);
- 如果没有:
getInvites().stream()
.filter(i -> token.equals(i.getToken()))
.forEach(i -> {
if (i.isConfirm())
throw new CustomException();
else
i.setConfirm(true);
});
令牌是唯一的还是多个Invite可以具有相同的?您可以将检查放在forEach
@azro令牌是唯一的代码中。当令牌不唯一时,一旦引发异常,它将跳过其他有效令牌。。除非它就在foreach被抓到
getInvites().stream()
.filter(i -> token.equals(i.getToken()))
.forEach(i -> {
if (i.isConfirm())
throw new CustomException();
else
i.setConfirm(true);
});