java - 在java中按值对 map 列表进行排序

标签 java sorting collections comparator

我有一张 map 列表。我无法预测每张 map 的关键。键可以是任意两位数字,该数字将根据请求而变化。但是值包含从请求到请求的唯一值。现在我需要根据每个键的值对这个映射列表进行排序。我已经尝试过类似的方法,

List<Map<String,String>> listOfMaps = new ArrayList<>();
Map<String,String> map1 = new HashMap<>();
Map<String,String> map2 = new HashMap<>();
map1.put("key1","value1");
map2.put("key2","value1");


listOfMaps.add(map1);
listOfMaps.add(map2);

sort(listOfMaps);

 Collections.sort(listOfMaps, new Comparator<Map<String, String>>() {
        public int compare(final Map<String, String> o1, final Map<String, String> o2) {
            return o1.get("key").compareTo(o2.get("key"));
        }
    });

由于“key”可能因 map 而异,似乎我无法使用上面的代码。 我也尝试过这些例子。

How to Sort a List of Maps by two Categories?

Sorting list of maps based on a value

由于我无法预测 key ,因此我无法从这些帖子中找到答案。有人可以帮忙吗?

最佳答案

假设每个 map 元素仅包含一个条目,下面的示例应该可以工作:

List<Map<String, String>> list = new ArrayList<>();
//Add entries
Collections.sort(list, new Comparator<Map<String, String>>() {
    public int compare(Map<String, String> o1, Map<String, String> o2) {
        Collection<String> values1 = o1.values();
        Collection<String> values2 = o2.values();
        if(!values1.isEmpty() && !values2.isEmpty()){
            return values1.iterator().next().compareTo(values2.iterator().next());
        }else{
            return 0;
        }
    }
});

关于java - 在java中按值对 map 列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36267050/

相关文章:

java - 在某些设备上抛出 java.lang.UnsupportedOperationException

Java 按字段对 CSV 文件进行排序

mysql - 如何在 MySQL 的逗号分隔列表字段中选择一个项目

swift - 如何在通用自定义类中使用字典

java - Map<Class<?>, Object> 注册表

java - LinkedList队列和线程安全

java - 找出构造了哪个枚举值

PHP - 按特定索引重新排列数组

Excel 排序 "mixed data"

java - 基于id的线程同步