Em fluxos Java, é realmente espiada apenas para depuração?
Estou lendo sobre fluxos Java e descobrindo coisas novas à medida que avança. Uma das coisas novas que encontrei foi apeek()
função. Quase tudo o que li na espiada diz que deve ser usado para depurar seus Streams.
E se eu tivesse um Stream em que cada Conta tivesse um nome de usuário, um campo de senha e um método de login () e logIn ().
eu também tenho
Consumer<Account> login = account -> account.login();
e
Predicate<Account> loggedIn = account -> account.loggedIn();
Por que isso seria tão ruim?
List<Account> accounts; //assume it's been setup
List<Account> loggedInAccount =
accounts.stream()
.peek(login)
.filter(loggedIn)
.collect(Collectors.toList());
Agora, até onde sei, isso faz exatamente o que se pretende fazer. Isto;
Leva uma lista de contasTenta fazer login em cada contaFiltra qualquer conta que não esteja logadaColeta as contas conectadas em uma nova listaQual é a desvantagem de fazer algo assim? Algum motivo para eu não prosseguir? Por fim, se não esta solução, então o que?
A versão original disso usava o método .filter () da seguinte maneira;
.filter(account -> {
account.login();
return account.loggedIn();
})