从Java中的lambda forEach()返回
我试图将一些for-each循环更改为lambda- forEach()
方法,以发现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()
方法中返回?
回答:
在return
那里,从λ表达式,而不是从包含方法返回。而不forEach
需要filter
流:
players.stream().filter(player -> player.getName().contains(name)) .findFirst().orElse(null);
这里filter
将流限制为与谓词匹配的那些项,findFirst
然后返回Optional
带有第一个匹配条目的。
这看起来不如for循环方法有效,但实际上findFirst()
会短路-
它不会生成整个过滤后的流,然后从中提取一个元素,而是仅过滤所需数量的元素,以便找到第一个匹配的。你也可以使用findAny()
,而不是findFirst()
如果你不一定在乎获得
第一个 从(订购)流,但只是任何匹配项匹配的球员。当涉及并行时,这可以提高效率。
以上是 从Java中的lambda forEach()返回 的全部内容, 来源链接: utcz.com/qa/423360.html