2015-05-21 30 views
8

Tôi có đoạn sau đây và tôi tự hỏi, nếu và làm thế nào nó có thể thay thế nó với Luồng/Java 8 APIThay thế hai lồng cho vòng với java 8 API

for (State state : states) { 
    for (City city : cities) { 
     if (state.containsPoint(city.getLocation())) { 
      System.out.printf("%30s is part of %-30s\n", 
        city.getName(), state.getName()); 
     } 
    } 
} 
+3

Cũng giống như một lưu ý, trong khi có thể chuyển đổi vòng lặp đó với API luồng, tôi không nghĩ bạn có thể đọc được trong trường hợp này và tôi sẽ gắn bó với vòng lặp này. –

+0

Vâng, chắc chắn rồi. Nhưng tôi đã tò mò làm thế nào một giải pháp có thể trông giống như – tplacht

Trả lời

17

Sẽ là một cái gì đó như thế:

// first loop 
states.forEach(state -> { 
    // second loop for filtered elements 
    cities.stream().filter(city -> state.containsPoint(city.getLocation())).forEach(city -> { 
     System.out.printf("%30s is part of %-30s\n", city.getName(), state.getName()); 
    }); 
}); 
+0

Đó là nhanh chóng. Cảm ơn tôi sẽ cung cấp cho nó một thử – tplacht

+6

Bạn có thể bỏ qua streaming 'tiểu bang' và chỉ đơn giản là sử dụng' states.forEach'. –

Các vấn đề liên quan