在Java流中,PEEK真的只用于調試嗎?我正在閱讀有關Java流的內容,并在進行過程中發現新的東西。我發現的新發現之一是peek()功能。我在peek上讀到的幾乎所有東西都說它應該用來調試您的流。如果我有一個Stream,其中每個帳戶都有一個用戶名、密碼字段和一個login()和loggedIn()方法。我也有Consumer<Account> login = account -> account.login();和Predicate<Account> loggedIn = account -> account.loggedIn();為什么會這么糟?List<Account> accounts; //assume it's been setupList<Account> loggedInAccount = accounts.stream()
.peek(login)
.filter(loggedIn)
.collect(Collectors.toList());據我所知,這完全是它想要做的。它;接受一個帳戶列表嘗試登錄到每個帳戶過濾掉任何未登錄的帳戶將登錄帳戶收集到新列表中。做這種事有什么壞處?有什么理由不讓我繼續嗎?最后,如果不是這個解決方案,那又是什么呢?最初的版本使用了.filter()方法,如下所示;.filter(account -> {
account.login();
return account.loggedIn();
})
3 回答

慕娘9325324
TA貢獻1783條經驗 獲得超4個贊
不要以意外的方式使用API,即使它實現了您的直接目標。
forEach
accounts
peek
forEach
peek
forEach
accounts.forEach(a -> a.login());List<Account> loggedInAccounts = accounts.stream() .filter(Account::loggedIn) .collect(Collectors.toList());

夢里花落0921
TA貢獻1772條經驗 獲得超6個贊
return list.stream().map(foo->foo.getBar()) .peek(bar->bar.publish("HELLO")) .collect(Collectors.toList());
List<Bar> bars = list.stream().map(foo->foo.getBar()).collect(Collectors.toList());bars.forEach(bar->bar.publish("HELLO"));return bars;
添加回答
舉報
0/150
提交
取消