包含Map<String, String>
个对象的列表对象需要作为参数传递,其参数类型为List<Map<String, Object>>
。
我需要像这样投射 -
List<Map<String, Object>> objectList = (List<Map<String, Object>>) (Object) strList;
这里有更好的方法吗?像上面给出的那样投射是个好主意吗? Java 8 Stream是否是更好的转换选择?
答案 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);