我使用的是spring,我用arraylist
定义了bean。邀请
它是一个包含邀请
对象的列表。
@Getter
public class Invite {
private String invitee;
private String email;
private boolean confirm;
private String token;
}
这是我的数据privider类:
@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"));
}
}
在configuration类中,我从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"));
>
如果令牌
唯一,则可以执行以下操作:
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);
});
我需要过滤一个列表
任务: null 我的示例的输出:
ArrayList中有一个对象列表,我希望将修改为其复数名。 参考示例: 我们有什么方法可以使用Java8流实现相同的行为吗?
我有一个包含一些字符串值的列表。我想与另一个字符串进行比较来迭代列表。只有当另一个字符串与列表中的任何元素都不匹配时,那么我才应该进入循环。我试过下面这样的东西,但没有效果。在Java8中有没有其他替代方法可以实现同样的功能? 注意:在循环中,我将向同一列表中添加更多的元素。因此,为了避免,我使用if条件进行验证。
试图从结构中获取项目列表,避免大量的for循环和if,所以我想使用 例如,lets具有以下结构: 我要创建: null List TestitemsFiltered=House1.FamilyList.Stream().FlatMap(f->f.PersonList.Stream().FlatMap(p->p.ItemList.Stream().Filter(Item->Item.Name.Equ
我正在尝试根据另一个列表中存在的值筛选一个列表。我已经经历了其他类似的问题,并试图利用这些来实现我的目标,但无法做到这一点。 列表1由类(L1)的对象组成 列表2由类(L2)的对象组成 因此,筛选后,列表1将不包含,因为该模型与中的不匹配。 我怎么能这么做?