【发布时间】:2020-10-07 19:21:12
【问题描述】:
我有两个具有相同类型对象的 HashSet。我的搜索条件是,在第一组中搜索,如果不存在,则在另一组中搜索。我曾尝试使用 Stream 层,步骤如下所示
Set<MyObject> firstSet = new HashSet<>();
Set<MyObject> secondSet = new HashSet<>();
这两个集合有一些价值。
Predicate<MyObject> match = myObject -> StringUtils.equals(myValue, myObject.getMyValue());
firstSet.values().stream().filter(match).findFirst()
.orElse(secondSet.values().stream().filter(match)
.findFirst().orElseThrow(()-> new MyException()));
我的匹配对象在第一个集合中,我尝试手动获取它,我得到了它......但是使用上面的迭代,即使第一个集合具有匹配的对象,我也总是得到异常。请纠正我..谢谢提前。
【问题讨论】:
-
当您将参数传递给方法时,首先评估该参数。在外部(即第一个)orElse 中,该 orElse 的参数是
secondSet.stream().values().filter(match) .findFirst().orElseThrow(()-> new MyException()),它在最后三行的任何其他内容之前被评估。
标签: java-stream iteration java-9