如何使用 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
参数。
我有一张地图
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
参数。