使用Java 8对代码执行操作

时间:2014-07-23 13:10:01

标签: java java-8

我有一个方法迭代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;
}

3 个答案:

答案 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;