Java 8 如何删除'-';并修剪地图的空白';使用Java流API的s密钥

Java 8 如何删除'-';并修剪地图的空白';使用Java流API的s密钥,java-8,java-stream,collectors,Java 8,Java Stream,Collectors,我有一张地图 Map<Object, Map<String, Object>> salesReportForSoldPropertyMap= salesReportForSoldProperty.stream().collect(Collectors.toMap(tags -> tags.get("E"), Function.identity())); 但这里我有一个问题,我不想要JSON键中的空格和“-”。所以我们可以用JAVA流API来解决它,这样它就可以给我

我有一张地图

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

但这里我有一个问题,我不想要JSON键中的空格和“-”。所以我们可以用JAVA流API来解决它,这样它就可以给我map的键,而不需要空格和“-”?与密钥“出售的第三方”应为“SoldThirdParty”类似,您可以通过
toMap
收集器转换值不变的密钥:

Map<String, Map<String, Object>> result = input.entrySet().stream()
    .collect(Collectors.toMap(e -> e.getKey().toString().replaceAll("[- ]", ""),
                              e -> e.getValue()));
Map 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
。为了特别处理这种情况,您可以将merge函数指定为第三个
toMap
参数。

答案很好,但有一个警告:如果删除破折号和空格后两个键相同,则此代码将爆炸。顺便说一句,您可以使用较短的正则表达式
“|-”
(而不是
“[-]”
@Bohemian,这篇文章已被《追问者》报道。不过,编辑这篇文章是为了警告未来的读者。谢谢。未来的访问者不是通灵者。最好在这里发表评论,这样这个问答就可以自己完成了。