Java 8:如何转换List <map <string,string =“”>&gt;列出<map <string,object =“”>&gt;

时间:2018-05-22 04:51:34

标签: java

包含Map<String, String>个对象的列表对象需要作为参数传递,其参数类型为List<Map<String, Object>>。  我需要像这样投射 -

List<Map<String, Object>> objectList = (List<Map<String, Object>>) (Object) strList;

这里有更好的方法吗?像上面给出的那样投射是个好主意吗? Java 8 Stream是否是更好的转换选择?

2 个答案:

答案 0 :(得分:1)

如果可以,您可以更改目标参数以键入List<? extends Map<String, ?>>

如果要构建与目标类型匹配的新对象,

List<Map<String, Object>> objectList = strList.stream()
        .map(map -> map.entrySet()
                .stream()
                .collect(Collectors.toMap(Map.Entry::getKey, e -> (Object)e.getValue())))
        .collect(Collectors.toList());

答案 1 :(得分:0)

以下是一个不安全的类型转换警告,但我相信抑制警告的情况是合理的,因为已知数据是兼容的。

List<Map<String, Object>> objectList = 
        list.stream()
            .map(m -> (Map<String, ?>) m)
            .map(m -> (Map<String, Object>) m) //warning
            .collect(Collectors.toList());

虽然流只有类型转换,但它仍然会创建一个新的集合,所以最好只更改下游API以接受两个类型参数:

private static <T extends Object> void 
        doSomething(List<Map<String, T>> objectList) {}

您可以使用以下任一类型调用它:

List<Map<String, String>> list = null;
List<Map<String, Object>> objectList = null;

doSomething(objectList);
doSomething(list);