[英]Conversion of loops to Java Streams
我正在编写这个逻辑,我正在为每个员工分配单独的房间,我将其代码粘贴在下面:
public List<EmployeeRooms> assignRoomEmployee(Request request) {
List<Employee> allEmployeeList = getAllEmployeeList(request);
int possibleAssigments = Math.min(request.getRooms().size(), allEmployeeList.size());
List<EmployeeRooms> finalList = new ArrayList<>();
int i = 0;
while(i < possibleAssigments) {
for (int j= 0; j < allEmployeeList.size(); j++) {
finalList.add(createRoomEmployeeList(allEmployeeList.get(j), request.getRooms().get(i)));
i++;
}
}
return finalList;
}
现在我想使用单个 Java 流语句编写此循环逻辑,但我无法正确执行此操作,我尝试了下面的代码,但它将每个房间分配给每个员工,从而创建重复而不是每个房间给单个员工:
while(i < possibleAssigments) {
allEmployeeList.stream()
.map(emp -> createRoomEmployeeList(emp, request.getRooms().get(i)))
.collect(Collectors.toList());
i++;
}
您可以使用IntStream()
在i
和possibleAssigments
之间循环,然后为每次迭代返回一个RoomEmployeeList
:
x -> createRoomEmployeeList(allEmployeeList.get(x), request.getRooms().get(x)))
最后收集它们。
我没有测试,但它应该是这样的:
finalList = IntStream.range(i, possibleAssigments).boxed().map(
x -> createRoomEmployeeList(allEmployeeList.get(x), request.getRooms().get(x)))
.collect(Collectors.toList());
assignRoomEmployee()
方法:
public List<EmployeeRooms> assignRoomEmployee(Request request) {
List<Employee> allEmployeeList = getAllEmployeeList(request);
int possibleAssigments = Math.min(request.getRooms().size(), allEmployeeList.size());
int i = 0;
List<EmployeeRooms> finalList = IntStream.range(i, possibleAssigments).boxed().map(
x -> createRoomEmployeeList(allEmployeeList.get(x), request.getRooms().get(x)))
.collect(Collectors.toList());
return finalList;
}
我看到的唯一错误是您没有将此 stream 操作的结果保存在变量中。
这应该是
List<EmployeeRooms> finalList = new ArrayList<>();
while(i < possibleAssigments) {
finalList.addAll(allEmployeeList.stream().map(emp -> createRoomEmployeeList(emp, request.getRooms().get(i))).collect(Collectors.toList()));
i++;
}
为员工分配房间
possibleAssigments-1
allEmployeeList.get(i)
和房间request.getRooms().get(i)
EmployeeRooms
使用 Stream API 您可以这样做。
List<EmployeeRooms> finalList =
IntStream.range(0, possibleAssigments)
.boxed()
.map(i -> createRoomEmployeeList(allEmployeeList.get(i),
request.getRooms().get(i)))
.collect(Collectors.toList());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.