【问题标题】:sort arraylist with key ascending使用键升序对数组列表进行排序
【发布时间】:2013-10-08 20:10:00
【问题描述】:
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

【问题讨论】:

  • 请更具体地说明您到底想要什么。我无法从你的问题陈述中得出结论
  • 应该和stackoverflow.com/questions/922528/…一样,希望对你有帮助
  • Hello Prateek.Its a for loop with values --> id and amount 如上所示,并将其添加到 arraylist -->list 中。我想按金额的升序对数组进行排序并得到各自的 id 相同。感谢您的宝贵时间。

标签: java sorting hashmap


【解决方案1】:

只需使用 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 是小写,那么你应该在构造函数中使用Comparator 覆盖TreeMap 的默认行为(以确保字符串键的排序是正确的):

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

【讨论】:

  • 您在哪里指定要对 amt 而不是 id 进行的排序?
  • 我也有 map = new LinkedHashMap();和 list = new ArrayList>();
  • @jason 字符串按字典顺序排序,因为 a 在 i 之前 amt 在 id 之前。
  • 我怎样才能把它具体化?如果它不是 amt 而是其他一些字母。尝试在实施中保持稳健。
  • 感谢 Magicano,这是很好的解释。如果我还有 4 个变量以及上面的 id,amt 但它仍然有比较 amt。上面的例子仍然有效吗?
【解决方案2】:

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

但是,对于排序列表,您有Collections.sort(),它可以依赖自然顺序(如果元素实现Comparable)或自定义Comparator。此外,如果您想在添加/删除元素时保持顺序,可以查看 SortedSet(和 TreeSet 实现)。

为了维护一个带有有序键的映射,你有SortMap(有一个值得注意的实现:TreeMap)这将确保它在任何时候保留的顺序——你可以随机添加元素,并且每当你迭代你会按顺序拿到钥匙。同样,顺序可以是自然顺序(由Comparable.compareTo 提供),或者您可以通过实现Comparator 接口来提供自定义顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多