如何对存储HashMap的ArrayList按指定Key排序或反转?
可以按HashMap的指定Key对ArrayList排序或反转
当然可以,不管是按HashMap里指定Key的值对ArrayList排序,还是直接反转整个列表,都能轻松实现,下面给你对应代码示例:
按name字段排序(字符串字典序)
可以用Collections.sort()或者Java 8+的List.sort()方法,通过自定义比较器实现按name升序排序:
// 传统写法(兼容Java 7及以下) Collections.sort(list, new Comparator<HashMap<String, String>>() { @Override public int compare(HashMap<String, String> o1, HashMap<String, String> o2) { String name1 = o1.get("name"); String name2 = o2.get("name"); // 处理name为null的情况,避免空指针 return name1 == null ? -1 : name2 == null ? 1 : name1.compareTo(name2); } }); // Java 8+简化写法 list.sort((o1, o2) -> { String name1 = o1.get("name"); String name2 = o2.get("name"); return name1 == null ? -1 : name2 == null ? 1 : name1.compareTo(name2); });
执行后列表会按name的字典序排列,输出结果:
[{name=adam, age=15, hobby=sports}, {name=dave, age=27, hobby=guitar}]
如果要降序,只需要把name1.compareTo(name2)改成name2.compareTo(name1)即可。
按age字段排序(数值排序)
注意你的age是字符串类型,直接按字符串比较会出现逻辑错误(比如"100"会被认为比"27"小),所以必须先转成整数再比较:
list.sort((o1, o2) -> { try { int age1 = Integer.parseInt(o1.get("age")); int age2 = Integer.parseInt(o2.get("age")); // 升序排序,降序则改成Integer.compare(age2, age1) return Integer.compare(age1, age2); } catch (NumberFormatException e) { // 处理age不是有效数字的情况,这里把非数字项放到列表末尾 return 1; } });
执行后列表按age从小到大排列,输出结果和按name升序的结果一致(因为adam的age更小)。
反转ArrayList
直接使用Collections.reverse()方法就能反转整个列表的顺序:
Collections.reverse(list);
原列表是[{name=dave,...}, {name=adam,...}],反转后变为:
[{name=adam, age=15, hobby=sports}, {name=dave, age=27, hobby=guitar}]
额外技巧:用Stream生成新的排序列表
如果不想修改原列表,可以用Java 8+的Stream API生成一个新的排序后的列表:
import java.util.stream.Collectors; // 按name升序生成新列表 List<HashMap<String, String>> sortedList = list.stream() .sorted((o1, o2) -> { String name1 = o1.get("name"); String name2 = o2.get("name"); return name1 == null ? -1 : name2 == null ? 1 : name1.compareTo(name2); }) .collect(Collectors.toList());
注意事项
- 一定要处理Key不存在或值为
null的情况,否则会抛出NullPointerException; - 像age这种数值型的字符串,必须转成对应的数值类型再比较,避免字符串排序的逻辑错误;
- 如果你的Java版本低于8,只能用
Collections.sort()结合匿名内部类的写法。
内容的提问来源于stack exchange,提问作者kee
相关产品推荐
相关产品推荐

