我有一个遍历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;
}发布于 2014-07-23 21:18:22
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>吗
发布于 2014-07-23 21:34:12
除非绝对需要,否则避免使用forEach,而应该使用收集器。
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);
}发布于 2014-07-23 21:17:11
快速伪代码可能会导致这样的结果-
data.entrySet().forEach((entry) -> returnMap.put(entry.getKey(), getXmlAsString((String)entry.getValue())));
return returnMap;https://stackoverflow.com/questions/24911388
复制相似问题