2015-05-21 10 views
8

ho il seguente frammento e mi chiedo se e come sia possibile sostituirlo con Streams/Java 8 APIsostituire due cicli for innestati con 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

Come nota, anche se è possibile convertire tale ciclo con l'API Stream, in questo caso non credo che acquisirai una certa leggibilità e rimango con questo ciclo. –

+0

Sì, sicuramente. Ma ero curioso di sapere come poteva sembrare una soluzione – tplacht

risposta

17

sarà qualcosa di simile:

// 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

Era veloce. Grazie, proverò a provarlo. – tplacht

+6

Puoi omettere lo streaming degli 'stati' e usare semplicemente' states.forEach'. –