我有TreeMap<String,Object>
,其中包含实际为HashMap<String,Object>
的对象。我想将其转换为List<HashMap<String,Object>>
。我试图使用Java 8转换它并编写以下代码,由于从List<Object>
转换为List<HashMap<String,Object>>
而导致编译错误。
public static void main(String[] args) {
TreeMap<String,Object> treeMap = new TreeMap<String,Object>();
HashMap<String,Object> map1 = new HashMap<String,Object>();
map1.put("a",1);
map1.put("b","2");
map1.put("c",5);
treeMap.put("01",map1);
HashMap<String,Object> map2 = new HashMap<String,Object>();
map2.put("a",5);
map2.put("b","7");
map2.put("c",6);
treeMap.put("02",map2);
//this conversion is not working as Java is not allowing to convert from List<Object> to List<HashMap<String,Object>>
List<HashMap<String,Object>> list= treeMap.values().stream()
.collect(Collectors.toList());
}
将TreeMap更改为TreeMap<String,HashMap<String,Object>>
有效但我不想进行此更改,因为我将此传递给需要TreeMap<String,Object>
的单独方法。
请建议。
答案 0 :(得分:3)
好吧,您将treeMap
定义为Object
值,这就是values().stream()
返回Stream<Object>
的原因。要么更改合同,要么您需要在流中转换元素:
List<HashMap<String,Object>> list= treeMap.values().stream()
.map(element -> (HashMap<String,Object>)element)
.collect(Collectors.toList());
答案 1 :(得分:1)
首先,我应该为treeMap
提供正确的类型:TreeMap<String, HashMap<String, Object>>
。
然后,您可以打包地图并将new TreeMap<String, Object>(treeMap)
传递给其他方法。
如果您不允许使用新地图,则可以按照Sean的评论将该方法的参数从TreeMap<String, Object>
更改为TreeMap<String, ?>
,如果您允许这样做的话。