如何使用 Java Stream API 删除地图键的 '-' 和 trim white space

How to remove '-' and trim white space of map's key using Java Stream API

我有一张地图

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"

您可以通过 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 参数。