如何删除' - '并使用Java Stream API修剪地图密钥的空白区域

时间:2016-02-03 07:03:11

标签: java-8 java-stream collectors

我有一张地图

Map<Object, Map<String, Object>> salesReportForSoldPropertyMap= salesReportForSoldProperty.stream().collect(Collectors.toMap(tags -> tags.get("E"), Function.identity()));

当我将Map转换为JSON时,我得到了这个

  {
  "Sold Promissory Buyer": 
    {
      "A": 2616100,
      "B": 2616100,
      "C": 31,
      "D": "Sold Promissory Buyer"
    },
  "Auction": 
    {
      "A": 101322143.24,
      "B": 50243301.2,
      "C": 569,
      "D": "Auction"
    },
  "Sold Third Party":
    {
      "A": 72000,
      "B": 93900,
      "C": 1,
      "D": "Sold Third Party"
    }      
}

但在这里我有一个问题,我不想要白色空间和&#39; - &#39;在JSON密钥中。那么我们可以通过JAVA Stream API来解决它,所以它会给我没有空格的地图键和&#39; - &#39 ;?喜欢关键&#34;出售第三方&#34;应该是&#34; SoldThirdParty&#34;

1 个答案:

答案 0 :(得分:2)

您可以通过toMap收集器

转换值不变的键
Map<String, Map<String, Object>> result = input.entrySet().stream()
    .collect(Collectors.toMap(e -> e.getKey().toString().replaceAll("[- ]", ""),
                              e -> e.getValue()));

请注意,原始密钥是您需要通过强制转换((String)e.getKey())或调用toString()将其转换为字符串的对象。

请注意,在应用替换后,不同的键可能会变得相同。例如,如果您的原始地图包含"A-B""AB"键,则两者都将转换为"AB"。在这种情况下,Collectors.toMap会抛出IllegalStateException。要专门处理此类情况,您可以将合并函数指定为第三个toMap参数。