Sto cercando di cambiare alcuni cicli for-each in lambda forEach()
-methods per scoprire le possibilità delle espressioni lambda. Sembra possibile quanto segue:
ArrayList<Player> playersOfTeam = new ArrayList<Player>();
for (Player player : players) {
if (player.getTeam().equals(teamName)) {
playersOfTeam.add(player);
}
}
Con lambda forEach()
players.forEach(player->{if (player.getTeam().equals(teamName)) {playersOfTeam.add(player);}});
Ma il prossimo non funziona:
for (Player player : players) {
if (player.getName().contains(name)) {
return player;
}
}
con lambda
players.forEach(player->{if (player.getName().contains(name)) {return player;}});
C'è qualcosa di sbagliato nella sintassi dell'ultima riga o è impossibile tornare dal forEach()
metodo?
return
all'interno di un'istruzione lambda ritorna dalla lambda stessa, non da qualunque cosa sia chiamata lambda. Termina presto un flusso ("cortocircuito") findFirst
come mostrato nella risposta di Ian Roberts .