当前位置: 首页 > 知识库问答 >
问题:

流式API求和&收集到映射中

越霖
2023-03-14

假设你有一张这样的物体地图(尽管想象它更大):

列表 >

[{
    "rtype": "133",
    "total": 2555
}, {
    "rtype": "133",
    "total": 5553
}, {
    "rtype": "135",
    "total": 100
}]

rtype=133,有两个!

我想对Streams做的是这样的:

//result:
//Map<String, Object(or double)>
{"133": 2555+5553, "135": 100} // SUM() of the 133s

我在理解Collectors&groupBy的工作原理时遇到了一些麻烦,但我想这可能会用于本例。

在Java streams API中进行编码的正确方法是什么?

我很难找到类似的地图例子(人们在他们的例子中更多地使用列表)

共有1个答案

魏勇军
2023-03-14

首先,你真的应该使用适当的类而不是地图。说到这里,下面是如何对地图列表进行分组的:

Map<String, Double> grouped = maps.stream()
        .collect(Collectors.groupingBy(m -> (String)m.get("rtype"),
                Collectors.summingDouble(m -> ((Number)m.get("total")).doubleValue())));
 类似资料:
  • 我有两个列表,我必须从它们创建一个地图。首先,我在迭代for loop,其次,我想通过一个stream和collect来映射,但我不知道在这种情况下如何使用collectors.tomap。有可能吗?

  • 我有一个问题,希望有人能帮助我提高Java流API的知识。 我的服务通过RabbitMQ以如下数组的形式从另一个服务接收数据: 我需要对这些数据做的是将其收集到用户具有userId的列表和设备id的列表中。因此,从上面的数据来看,它应该是: 我确实有一个可行的解决方案,但它很笨拙 解决方案是: 如何对流执行相同的操作?谢谢

  • 我想从的中创建一个并在映射中使用相同的parentId映射列表中的所有条目,如。 我使用了但它不编译:

  • 假设我有以下工作的lambda表达式: 我想在过滤器语句之前创建一个具有2个值的流。所以我想做一个映射,但仍然保留原始值。我想实现这样的事情: 这可能与Java8流?我已经看了收集(GroupingBy()),但仍然没有成功。

  • 问题内容: 在上面的代码中,我可以期望中的名称顺序始终与中的顺序相同吗? 问题答案: 是的,只要您没有将并行流显式转换为模式,即使您正在使用并行流,也可以期望这样做。 顺序永远不会在顺序模式下更改,但可能会在并行模式下更改。流变得无序: 如果您通过调用将其明确转换为无序模式 如果流源报告它是无序的(例如,流是无序的,因为顺序取决于实现,因此您不能依赖它) 如果您使用的是无序终端操作(例如,进行操作