【问题标题】:Java 8 Converting List<Map<String,String> to Map<String,Map<String,String>>Java 8 将 List<Map<String,String> 转换为 Map<String,Map<String,String>>
【发布时间】:2017-02-09 08:29:22
【问题描述】:

我想转换地图列表,即

List<Map<String,String> 

到地图的地图,即

Map<String,Map<String,String>>;

在地图列表中,我存储了两个城市之间的距离。我的地图列表是:

[{目的地=爱荷华州,距离=2000,来源=纽约},{目的地=俄亥俄州, 距离=3000,来源=NY},{目的地=TX,距离=2500,来源=NY}, {目的地=NC,距离=1500,源=TX},{目的地=NY, 距离=2500,源=TX},{目的地=DEL,距离=3000, 来源=TX}]

现在我必须把它转换成

MAP<String<Map<String,String>>, 

这样我们就可以获得与所有城市的距离。外部地图键将是源城市。值图将以目的地城市作为键,以源到目的地之间的距离作为值。输出格式为:

{TX={NC=1500, DEL=3000, NY=2500}, NY={IOWA=2000, TX=2500, OHIO=3000}}

我想使用 Java 8 Stream API 转换它。不知道如何使用 groupingby。

【问题讨论】:

  • 你有没有试一试?
  • 为什么不使用合适的对象?地图列表总是一种代码味道。

标签: java java-stream


【解决方案1】:

正如其他人所指出的,您没有使用理想的数据结构。但这应该在这种情况下做你想做的事:

Map<String, Map<String, String>> distancesBySource = distances.stream()
        .collect(Collectors.groupingBy(m -> m.get("Source"),
                Collectors.toMap(m -> m.get("Destination"), m -> m.get("distance"))));

【讨论】:

  • 请注意,如果您有重复的数据点,它将抛出 IllegalStateException
  • 我赞成你的回答。我的也收到了赞成票,所以我不会删除它。这种情况是否有“最佳实践”?
  • @Fildor 我认为发布扩展 cmets 作为答案是可以接受的(或至少可以接受)。就个人而言,我认为您对 Kayaman 的原始评论并没有添加太多实质内容。但看起来我在这方面是少数。
猜你喜欢
  • 2020-03-17
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 2018-09-06
  • 1970-01-01
  • 2020-04-01
相关资源
最近更新 更多