【发布时间】:2014-06-17 21:22:59
【问题描述】:
我正在尝试将一些 for-each 循环更改为 lambda forEach()-methods 以发现 lambda 表达式的可能性。以下似乎是可能的:
ArrayList<Player> playersOfTeam = new ArrayList<Player>();
for (Player player : players) {
if (player.getTeam().equals(teamName)) {
playersOfTeam.add(player);
}
}
使用 lambda forEach()
players.forEach(player->{if (player.getTeam().equals(teamName)) {playersOfTeam.add(player);}});
但是下一个不行:
for (Player player : players) {
if (player.getName().contains(name)) {
return player;
}
}
使用 lambda
players.forEach(player->{if (player.getName().contains(name)) {return player;}});
最后一行的语法有问题还是无法从forEach()方法返回?
【问题讨论】:
-
我还不太熟悉 lambdas 的内部结构,但是当我问自己这个问题:“你会从什么返回?”时,我最初的怀疑是它不是方法。
-
@Gimby 是的,
return在语句中 lambda 从 lambda 本身返回,而不是从任何称为 lambda 的地方返回。提前终止流(“短路”)使用findFirst,如Ian Roberts' answer所示。
标签: java foreach lambda java-8 return-type