如何用流替换两个嵌套的for循环和if语句

-1 java java-stream

我有一个if语句嵌套在for循环内,而这两个都嵌套在另一个for循环内。我想提出一些建议,如果可以使用流API对其进行替换,以及是否应该对其进行替换或保留原样。

我一直在寻找解决方案,但是我想要的事情似乎更加复杂,因为我需要基于与另一个列表匹配的ID来修改一个列表。

for (User user : userList) {
    for (Vehicle vehicle : vehicleList) {
        if (user.getId().equals(vehicle.getUserID())) {
            user.addVehicleToList(vehicle);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用流产生相同的结果。

小智 5

如果要使用Stream API,请使用以下代码。

userList.forEach(user -> {
    vehicleList.stream()
        .filter(vehicle -> vehicle.getUserID().equals(user.getId()))
        .forEach(user::addVehicleToList);
    });
Run Code Online (Sandbox Code Playgroud)

  • 现在并行执行此操作...“forEach”在这里有非常糟糕的副作用;这违反了规范 (2认同)