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,这篇文章已被《追问者》报道。不过,编辑这篇文章是为了警告未来的读者。谢谢。未来的访问者不是通灵者。最好在这里发表评论,这样这个问答就可以自己完成了。