Tôi đang cố gắng thay đổi một số vòng lặp cho từng lambda forEach()
-methods để khám phá các khả năng của các biểu thức lambda. Các followong có vẻ là có thể:Trả lại từ lambda forEach() trong java
ArrayList<Player> playersOfTeam = new ArrayList<Player>();
for (Player player : players) {
if (player.getTeam().equals(teamName)) {
playersOfTeam.add(player);
}
}
Với lambda forEach()
players.forEach(player->{if (player.getTeam().equals(teamName)) {playersOfTeam.add(player);}});
Nhưng một trong những công việc doesen't tiếp theo:
for (Player player : players) {
if (player.getName().contains(name)) {
return player;
}
}
với lambda
players.forEach(player->{if (player.getName().contains(name)) {return player;}});
Liệu có đôi khi hing sai trong cú pháp của dòng cuối cùng hoặc là nó không thể quay trở lại từ forEach()
phương pháp?
Tôi không quá quen thuộc với nội bộ của lambdas được nêu ra, nhưng khi tôi đặt câu hỏi cho bản thân mình: "Những gì bạn sẽ trở về từ?", Nghi ngờ ban đầu của tôi sẽ là nó không phải là phương pháp. – Gimby
@Gimby Có, 'return' trong một tuyên bố lambda trả về từ lambda chính nó, không phải từ bất cứ điều gì được gọi là lambda. Việc chấm dứt một luồng sớm ("short-circuiting") sử dụng 'findFirst' như được hiển thị trong câu trả lời [Ian Roberts '] (http://stackoverflow.com/a/23407107/1441122). –