将TreeMap <string,object>转换为List <hashmap <string,object>&gt;

时间:2018-02-06 18:50:09

标签: list collections java-8 hashmap java-stream

我有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>的单独方法。

请建议。

2 个答案:

答案 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, ?>,如果您允许这样做的话。