微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Java中的lambda forEach返回

如何解决从Java中的lambda forEach返回

return那里,从λ表达式,而不是从包含方法返回。而不forEach需要filter流:

players.stream().filter(player -> player.getName().contains(name))
       .findFirst().orElse(null);

这里filter将流限制为与谓词匹配的那些项,findFirst然后返回Optional带有第一个匹配条目的。

这看起来不如for循环方法有效,但实际上findFirst()会短路- 它不会生成整个过滤后的流,然后从中提取一个元素,而是仅过滤所需数量的元素,以便找到第一个匹配的。你也可以使用findAny(),而不是findFirst()如果你不一定在乎获得一个 从(订购)流,但只是任何匹配项匹配的球员。当涉及并行时,这可以提高效率。

解决方法

我试图将一些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()方法中返回?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。