java 中的地图使用流而不是 for 循环

using stream instead of for loop for maps in java

我正在处理 java 项目,我必须在该项目中迭代列表并根据该列表中的计算将值放入新地图中。

这是使用基本 for 循环的工作原理:

    Map<Long, PickingDetails> pickingDetailsDTOMap = new HashMap<>();
    for(int i=0;i<pickingJobModels.size();i++)
     {
 pickingDetailsDTOMap.put(pickingJobModels.get(i).getPickListDTO().getReferenceId(),getPickingDetails(pickingJobModels.get(i)));
      }

但我想用流来做,所以我这样做了:

pickingJobModels.stream().map(pickingJobModel -> pickingDetailsDTOMap.put(pickingJobModel.getPickListDTO().getReferenceId(),getPickingDetails(pickingJobModel)));

但是当我 return 那个 pickingDetailsDTOMap 我得到空地图。

有什么关于如何在这种情况下使用流的建议吗?

这不是正确的方法。 map 是一个中间操作(即它被延迟评估)并且你没有终端操作,所以它永远不会被评估。您应该 collect 将数据转换为 Map:

Map<Long, PickingDetails> pickingDetailsDTOMap = 
    pickingJobModels.stream()
                    .collect(Collectors.toMap(pm -> pm.getPickListDTO().getReferenceId(),
                                              pm -> getPickingDetails(pm)));

创建流时,您创建了操作定义。这些操作将针对流中的每个元素一个接一个地执行。

如同置人于世,授之于人。第一个,流的源有指令:如果站在你右边的下一个人向你询问一个值,给他们这个数组、集合或任何流源的下一个元素。

下面做“地图”的人得到指令:每当站在你右边的人向你索取一个值,那么你先向站在你左边的人索取一个值,做地图操作关于价值,把人给右边。

该行的最后一个人,终端操作是唯一一个收到指令的人:主动向你左边的人索取值并收集这些值。

你给了两个人指令,但没有执行流的终端操作。

流从右到左执行。如果没有终端操作,则什么也不会发生。