按键升序排序arraylist

时间:2013-10-08 20:10:01

标签: java sorting hashmap

map = new LinkedHashMap<String, String>(); 
list = new ArrayList<HashMap<String, String>>(); 

map.put("id", id);
map.put("amt", amt);

list.add(map);

如何按amt的升序对列表进行排序。我无法做到这一点。 我真的很感激任何帮助。

我在循环中添加idamt。如何使用密钥amt进行排序?

id=1,2,3,4,5
amt=1000,33333,77,9087,5432

2 个答案:

答案 0 :(得分:3)

只需使用 TreeMap

Map<String, String> map = new TreeMap<String, String>();
List<Map<String, String>> list = new ArrayList<Map<String, String>>();

map.put("id", "id");
map.put("amd", "amd");

list.add(map);

System.out.println(list);

<强>输出:

[{amd=amd, id=id}]

现在,如果Id为大写,amd为小写,那么您应该在构造函数中使用TreeMap覆盖Comparator的默认行为(以确保字符串键的排序是正确的):

Map<String, String> map = new TreeMap<String, String>(new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o1.toLowerCase().compareTo(o2.toLowerCase());
        }
    });

Look to the TreeMap API Documentation

答案 1 :(得分:0)

你的问题不是很清楚,因为在某些时候你似乎提到只用一个元素(你的地图)排序一个列表。但我假设您想要对该地图中的键进行排序(在地图内部或将它们全部添加到某个列表之后)。

但是,对于排序列表,您Collections.sort()可以依赖自然顺序(如果元素实现Comparable)或自定义Comparator。此外,如果您希望在添加/删除元素时维护订单,则可以查看SortedSet(以及TreeSet实现)。

为了维护带有序键的地图,你有SortMap(有一个值得注意的实现:TreeMap),这将确保它随时保留的顺序 - 你可以随机添加元素无论何时你迭代你都会按顺序得到钥匙。同样,订单可以是自然订单(由Comparable.compareTo提供),也可以通过实施Comparator界面提供自定义订购。