转换地图&lt;&gt;映射<string,string>

时间:2016-04-08 09:01:01

标签: java list dictionary type-conversion comparator

我有一些像这样的代码,我尝试通过sortby中给出的键对Map of Map中的值进行排序。代码如下:

final String sortby = "first";
    List<Map> lm = new ArrayList<Map>();
    Map m = new HashMap();
    m.put("id", "eka");
    m.put("first", "ek");
    m.put("last", "a");
    lm.add(m);
    m = new HashMap();
    m.put("id", "adit");
    m.put("first", "adi");
    m.put("last", "t");
    lm.add(m);

    for(Object M : lm){
        System.out.println(M.toString());
    }

    Comparator<Map<String,String>> mapComparator = new Comparator<Map<String,String>>() {
        public int compare(Map<String,String> m1, Map<String,String> m2) {
            return m1.get(sortby).compareTo(m2.get(sortby));
        }
    };

    Collections.sort(lm, mapComparator);

    for(Object M : lm){
        System.out.println(M.toString());
    }

但由于不兼容的数据类型,它无法使用比较器进行比较。如何将Map<>转换为Map<String,String>或任何其他建议,以便比较器可以比较所有数据类型?

2 个答案:

答案 0 :(得分:1)

您正在使用lmm变量的原始类型。您可以将代码更改为以下内容:

List<Map<String, String>> lm = new ArrayList<>();
Map<String, String> m = new HashMap<>();
// ...

m = new HashMap<>();
// ...

for (Map<String, String> map : lm)
{
    // ...
}

// ...

for (Map<String, String> map : lm)
{
    // ...
}

请注意,ArrayList构造函数使用<>而不是<Map>,表示推断了作业左侧的类型(Map<String, String>)。你也可以这样写:

 List<Map<String, String>> lm = new ArrayList<Map<String, String>>()

同样适用于HashMap构造函数。

答案 1 :(得分:1)

{{1}}