我是java的新手,我想知道如何将以下代码从使用称为HashMapfloorsMap转换为使用称为ArrayListfloorsArray的方法。

void randomizeQueues(String flag) {
    double num = (flag.equals("enforce")) ? 0.99 : Math.random();
    if (num > 0.5)
        floorsMap.values().forEach(Floor::randomizeDestinations);
}

最佳答案

forEach是一个终端操作;它什么也不返回;因此,调用没有副作用的方法是不执行任何操作。

我认为您正在寻找一系列可以转换然后将结果汇总为新集合类型的操作。流API用于执行此操作:

List<Floor> randomizedFloors = floorsMap.values().stream()
    .map(Floor::randomizeDestinations)
    .collect(Collectors.toList());

编辑:

也许randomizeDestinations将“就地”随机化并返回void。在这种情况下,除非您有办法克隆必须明确创建的Floor对象,否则您将无法保持地图完整无缺,然后拥有包含随机目的地的列表。您可以这样做:

List<Floor> randomizedFloors = floorsMap.values().stream().map(floor -> {
    Floor clone = floor.makeACopy(); // you must write this
    clone.randomizeDestinations();
    return clone;
}).collect(Collectors.toList());

09-11 09:10