Я читаю о потоках Java и обнаруживаю новые вещи, когда я иду. Одной из новых вещей, которые я нашел, была функция peek()
. Почти все, что я читал в peek, говорит, что он должен использоваться для отладки ваших потоков.
Что делать, если у меня есть Stream, в котором у каждой учетной записи есть имя пользователя, пароль и метод login() и loggedIn().
У меня также есть
Consumer<Account> login = account -> account.login();
и
Predicate<Account> loggedIn = account -> account.loggedIn();
Почему это так плохо?
List<Account> accounts; //assume it been setup
List<Account> loggedInAccount =
accounts.stream()
.peek(login)
.filter(loggedIn)
.collect(Collectors.toList());
Теперь, насколько я могу судить, это делает именно то, что он намеревался сделать. Это
- принимает список учетных записей
- Пытается войти в каждую учетную запись
- Фильтрует любую учетную запись, которая не войдет в систему
- Собирает зарегистрированные учетные записи в новый список
В чем недостаток делать что-то подобное? По какой-то причине я не должен продолжать? Наконец, если не это решение, то что?
В исходной версии этого метода использовался метод .filter() следующим образом:
.filter(account -> {
account.login();
return account.loggedIn();
})