用Java8API替换两个嵌套的for循环

用Java8API替换两个嵌套的for循环,java,loops,lambda,java-8,Java,Loops,Lambda,Java 8,我有下面的代码片段,我想知道是否以及如何用Streams/Java8API替换它 for (State state : states) { for (City city : cities) { if (state.containsPoint(city.getLocation())) { System.out.printf("%30s is part of %-30s\n", city.getName(), s

我有下面的代码片段,我想知道是否以及如何用Streams/Java8API替换它

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());
        }
    }
}

将是这样的:

// 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());
    });
});

太快了。谢谢,我会尝试一下。你可以省略流式传输
状态
,只需使用
状态。forEach
。需要注意的是,虽然可以使用流API转换这样的循环,但我认为在这种情况下,你的可读性没有提高,我会坚持使用for-loop。是的,肯定。但我很好奇解决方案会是什么样子like@AlexisC. - 有道理。像这个嵌套for循环示例一样,关于何时最好不使用lambda和streams,是否有任何通用的指导原则?