【问题标题】:Java - Combine multiple list data into single separate column listJava - 将多个列表数据组合成单个单独的列列表
【发布时间】:2016-07-16 21:55:57
【问题描述】:

我想知道是否可以将不同流中的数据组合成一个流。通过组合,我的意思是将其添加到单独的列中,而不是现有列中。

到目前为止,我已经能够将数据收集到单独的地图中,如下例所示。我认为我应该将这些地图合并为一个,但不知道该怎么做或者我是否做错了什么。

我进行了一些搜索,在 FlatMap、Concat 等上找到了一些线程,但由于我是这个 Streams & Map 功能的新手,所以我寻求指导。 (目前我在不使用 Map / Streams 功能的情况下进行这项工作,只使用带有 Add & AddALL 的标准 List )

例如: 列出数据 - 1 Map<String, int> carMileage

  • [carOne, 10]
  • [carTwo, 20]
  • [carThree, 25]

列出数据 - 2 Map<String, String> carGearBox

  • [carThree,自动]
  • [carTwo,手动]
  • [carOne,混合]

列出数据 - 3 Map<String, Double> carMaxSpeed

  • [carTwo, 160.75]
  • [carThree, 200.25]
  • [carOne, 250.55]

输出:[类似于:Map<String, dataCar>]

  • [carOne,10,混合,250.55]
  • [carTwo,20,手动,160.75]
  • [carThree,25,自动,200.25]

【问题讨论】:

  • 您问如何合并地图,但也许没有这些地图会更容易获得所需的结果?数据源是什么样的?是 sql.ResultSet 吗?
  • @AdamSkywalker 数据集来自多个 excel 文件。最终我打算用 MySQL 替换 excel 数据,但现在我正在从 Excel 中提取数据

标签: java java-8 java-stream


【解决方案1】:

假设所有 3 个映射具有相同的一组键,直接的解决方案是在一个映射的条目上创建一个流(例如 carMileage)并将其收集到另一个 DataCar 的映射中。如果有构造函数DataCar(mileAge, String gearBox, Double maxSpeed),你可以有以下内容:

Map<String, DataCar> result =
    carMileage.entrySet()
              .stream()
              .collect(Collectors.toMap(
                Map.Entry::getKey,
                e -> new DataCar(e.getValue(), carGearBox.get(e.getKey()), carMaxSpeed.get(e.getKey()))
              ));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    相关资源
    最近更新 更多