用java 8 API替换两个嵌套的for循环

tpl*_*cht 15 java lambda loops java-8

我有以下代码片段,我想知道是否以及如何用Streams/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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Var*_*lok 29

会是这样的:

// 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());
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 你可以省略流'state`并简单地使用`states.forEach`. (6认同)