Estou tentando alterar alguns loops for-each para forEach()
métodos lambda para descobrir as possibilidades das expressões lambda. O seguinte parece ser possível:
ArrayList<Player> playersOfTeam = new ArrayList<Player>();
for (Player player : players) {
if (player.getTeam().equals(teamName)) {
playersOfTeam.add(player);
}
}
Com lambda forEach()
players.forEach(player->{if (player.getTeam().equals(teamName)) {playersOfTeam.add(player);}});
Mas o próximo não funciona:
for (Player player : players) {
if (player.getName().contains(name)) {
return player;
}
}
com lambda
players.forEach(player->{if (player.getName().contains(name)) {return player;}});
Há algo errado na sintaxe da última linha ou é impossível retornar do forEach()
método?
return
dentro de uma instrução lambda retorna do próprio lambda, não de qualquer coisa chamada lambda. Eles encerram um fluxo antecipadamente ("curto-circuito"), findFirst
conforme mostrado na resposta de Ian Roberts .