我有一个方法迭代Map并对值执行操作并填充Map以返回。
我的问题是,如何将其转换为Java 8(不循环执行操作)?
代码:
private static Map<String, Object> iterateAndConvertValueXmlToString(Map<String, Object> data) {
Map<String, Object> returnMap = new HashMap<>();
for (Map.Entry<String,Object> entry : data.entrySet()) {
returnMap.put(entry.getKey(), getXmlAsString((String)entry.getValue()));
}
return returnMap;
}
答案 0 :(得分:2)
private static Map<String, Object> convertXmlValueToString(Map<String, Object> data) {
return data.entrySet().stream().collect(Collectors.toMap(
Map.Entry::getKey,
entry -> getXmlAsString((String)entry.getValue())
));
}
顺便说一下:不应该将返回类型设为Map<String, String>
而不是Map<String, Object>
吗?
答案 1 :(得分:2)
除非绝对需要,否则请避免使用,而是选择收藏家。
public static final String getXmlAsString(final Object xmlObject) {
return xmlObject.toString();
}
public static final Map<String, String> xmlObjectToString(final Map<String, Object> xmlObjectsByString) {
return xmlObjectsByString.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> getXmlAsString(entry.getValue())));
}
public static final void main(final String... args) {
final Map<String, Object> xmlObjectsByString = new HashMap<>();
xmlObjectsByString.put("Mykey", "<xml/>");
final Map<String, String> xmlStringsByString = xmlObjectToString(xmlObjectsByString);
// {Mykey=<xml/>}
System.out.println(xmlStringsByString);
}
答案 2 :(得分:0)
快速伪代码可能导致类似这样的内容 -
data.entrySet().forEach((entry) -> returnMap.put(entry.getKey(), getXmlAsString((String)entry.getValue())));
return returnMap;