1

我有一张地图

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"
    }      
}

但是在这里我有一个问题,我不想要 JSON 键中的空格和“-”。那么我们可以通过 JAVA Stream API 解决它,所以它会给我地图的密钥,没有空格和'-'?像键“Sold Third Party”应该是“SoldThirdParty”

4

1 回答 1

2

toMap您可以通过收集器转换具有不变值的键:

Map<String, Map<String, Object>> result = input.entrySet().stream()
    .collect(Collectors.toMap(e -> e.getKey().toString().replaceAll("[- ]", ""),
                              e -> e.getValue()));

请注意,您的原始键是对象,您需要通过 cast( (String)e.getKey()) 或调用将它们转换为字符串toString()

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

于 2016-02-03T07:39:47.187 回答