在Java流中,偷看真的只是为了调试吗?
我正在阅读有关Java流的信息,并在前进的过程中发现新事物。我发现的一个新东西是功能。我在peek上读到的几乎所有内容都说它应该用于调试您的Streams。peek()
如果我有一个流,其中每个帐户都有一个用户名,密码字段以及一个login()和logIn()方法,该怎么办?
我也有
Consumer<Account> login = account -> account.login();
和
Predicate<Account> loggedIn = account -> account.loggedIn();
为什么会这么糟糕?
List<Account> accounts; //assume it's been setup
List<Account> loggedInAccount =
accounts.stream()
.peek(login)
.filter(loggedIn)
.collect(Collectors.toList());
现在,据我所知,这完全符合它的意图。它;
- 获取帐户列表
- 尝试登录到每个帐户
- 过滤掉任何未登录的帐户
- 将登录帐户收集到新列表中
做这样的事情有什么缺点?有什么理由我不应该继续吗?最后,如果不是这个解决方案,那又是什么?
它的原始版本使用.filter()方法,如下所示;
.filter(account -> {
account.login();
return account.loggedIn();
})