Trong khi học Java 8 suối và lambas, tôi đã cố gắng để thay thế lồng nhau sau cho vòng với suối:Cách thích hợp để thay thế một vòng lặp lồng nhau bằng các luồng trong Java 8 là gì?
List<Long> deskIds = new ArrayList<>();
for(ProvidedService memberService : service.getAllNodesDepthFirst()){
for(Desk d : memberService.getDesks()){
deskIds.add(d.getId());
}
}
Các lặp loop một danh sách các đối tượng 'ProvidedService', và cho mỗi một, lặp trên một tài sản danh sách đối tượng 'Bàn' và trích xuất trường 'Id' thành danh sách.
tôi đã đưa ra đoạn mã sau sử dụng dòng:
List<Long> deskIds = new ArrayList<>();
service.getAllNodesDepthFirst().stream().forEach(srv -> {
deskIds.addAll(srv.getDesks().stream().map(Desk::getId).collect(Collectors.toList()));
});
Đó có phải là/cách thích hợp tối ưu để làm điều đó? Hoặc là có một cách để làm điều này mà không có dòng lồng nhau thứ hai?
Tôi nghĩ rằng đó là fine.There là không có vấn đề với cách tiếp cận của bạn. –
Để kiểm tra thêm liên kết này: http://www.oracle.com/technetwork/articles/java/ma14-java-se-8-streams-2177646.html –
@Prakhar: vâng, cách tiếp cận của tôi đã hoạt động, nhưng nó thật là ngây thơ và tôi nghĩ có một số cách để sắp xếp nó, giống như assylias đã chứng minh. –