【发布时间】:2021-03-09 13:36:43
【问题描述】:
通常,使用列表我会遇到如下情况(假设用户包含 ID 和名称):
List<User> users = loadFromDb();
List<User> lookingForIdResultList = user.stream()
.filter( u -> u.getId() == 1234)
.collect(Collectors.toList())
if(lookingForIdResultList.size() == 0) throw UserNotFoundException()
if(lookingForIdResultList.size() > 1) throw MultipleIdsNotPermittedExcpetion()
User searchedUser = lookingForIdResultList.get(0);
System.out.println("Username is "+ searchedUser.getName())
我问,是否有办法使用 java 流 api 缩短验证?
这只是一个过于简单的例子,问题很笼统。我不想从 db 加载用户。
坦克!
【问题讨论】:
-
为什么不将 id 传递给数据库查询,只检查返回结果的数量?为什么会有多个具有相同 id 的用户呢?您说您已将其用作示例,因此如果问题更普遍:它是否总是涉及从数据库加载数据?
-
这个特殊的例子散发着XY Problem 的味道,因为
loadFromDb可能应该接收一个参数来放入where子句并预先过滤用户列表。 -
即使有办法缩短它,我不确定它是否仍然是一个可读的解决方案。
-
你完全正确。在这种特殊情况下,有更好的解决方案,但正如@Thomas 所提到的,这只是一个过于简化的例子,问题更普遍。不,数据不仅来自数据库,有时还来自国外 api 或其他内部计算。问题只是关于验证结果。