【发布时间】:2019-05-18 07:36:22
【问题描述】:
我有以下代码:
interface Device {
// ...
boolean isDisconnected();
void reconnect();
}
interface Gateway {
// ...
List<Device> getDevices();
}
...
for (Gateway gateway : gateways) {
for(Device device : gateway.getDevices()){
if(device.isDisconnected()){
device.reconnect();
}
}
}
我想使用 Stream API 重构代码。我的第一次尝试如下:
gateways
.stream()
.forEach(
gateway -> {
gateway
.getDevices()
.parallelStream()
.filter(device -> device.isDisconnected())
.forEach(device -> device.reconnect())
;
}
)
;
我不喜欢它,所以经过一些修改后,我最终得到了以下代码:
gateways
.parallelStream()
.map(gateway -> gateway.getDevices().parallelStream())
.map(stream -> stream.filter(device -> device.isDisconnected()))
.forEach(stream -> stream.forEach(device -> device.reconnect()))
;
我的问题是是否有办法避免嵌套forEach。
【问题讨论】:
标签: java collections foreach java-8 java-stream