繁体   English   中英

java arraylist HashMap如何排序?

[英]java arraylist HashMap how to sort?

数组如何排序?

之前

{"A"=1, "B"=1, "C"=3}, 
{"A"=1, "B"=1, "C"=2},
{"A"=1, "B"=11, "C"=2},
{"A"=1, "B"=2, "C"=2},
{"A"=1, "B"=1, "C"=11}

{"A"=1, "B"=1, "C"=2},
{"A"=1, "B"=1, "C"=3},
{"A"=1, "B"=1, "C"=11},
{"A"=1, "B"=2, "C"=2}, 
{"A"=1, "B"=11, "C"=2}

    ArrayList mylist = new ArrayList();

    Map<String,Integer> mMap = new HashMap<String,Integer>();
    mMap.put("A",1);
    mMap.put("B",1);
    mMap.put("C",3);
    mylist.add(mMap); 

    mMap = new HashMap<String,Integer>();
    mMap.put("A",1);
    mMap.put("B",1);
    mMap.put("C",2);
    mylist.add(mMap); 

    mMap = new HashMap<String,Integer>();
    mMap.put("A",1);
    mMap.put("B",11);
    mMap.put("C",2);
    mylist.add(mMap);

    mMap = new HashMap<String,Integer>();
    mMap.put("A",1);
    mMap.put("B",2);
    mMap.put("C",2);
    mylist.add(mMap);

    mMap = new HashMap<String,Integer>();
    mMap.put("A",1);
    mMap.put("B",1);
    mMap.put("C",11);       
    mylist.add(mMap);

定义自己的比较器,如下所示:

public class MyMapComparator implements Comparator<Map <String, Integer>> 
{
    @Override
    public int compare (Map<String, Integer> o1, Map<String, Integer> o2) 
    {
        int c;

        c = o1.get ("A").compareTo(o2.get ("A"));
        if (c != 0) return c;

        c = o1.get ("B").compareTo(o2.get ("B"));
        if (c != 0) return c;

        return o1.get ("C").compareTo(o2.get ("C"));
    }
}

然后使用它对您的列表进行排序:

Collections.sort (mylist, new MyComparator ());

您需要使用Collections.sort(list, comparator) ,其中Comparator<Map>实现您的自定义比较逻辑

这是一个示例,说明如何对可编译和运行的HashMaps的ArrayList进行排序-我找不到这样的示例-因此,除非我从Dell mini上轻松进行剪切和粘贴操作,否则应该做到这一点。

import java.util.*;
import java.lang.*;

public class test {

public static class mySort implements Comparator<HashMap<String,Integer>> {

    @Override
    public int compare(HashMap<String, Integer> map1, HashMap<String, Integer> map2) {
        return map1.get("number").intValue() - map2.get("number").intValue();
    }
}


static void displayAL(ArrayList<HashMap> al) {

    Iterator it = al.iterator();
    HashMap<String,Integer> hm;

    while (it.hasNext()) {

      hm = (HashMap<String,Integer>)it.next();
      System.out.println(hm.get("number"));

    }

    System.out.println();

}


public static void main(String[] args) {

    ArrayList<HashMap> al = new ArrayList<HashMap>();
HashMap<String,Integer> hm = new HashMap<String,Integer>();

hm.put("number",10);
al.add(hm);
hm = new HashMap<String,Integer>();
hm.put("number",2);
al.add(hm);
hm = new HashMap<String,Integer>();
hm.put("number",0);
al.add(hm);
hm = new HashMap<String,Integer>();
hm.put("number",-3);
al.add(hm);

displayAL(al);

Collections.sort((ArrayList)al,new mySort());

System.out.println("sorted:\n");

displayAL(al);

  }
}


rick@rick-jolicloud:~/javaProjects$ java test
10
2
0
-3

sorted:

-3
0
2
10

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM