在java中按值对地图列表进行排序

Kav*_*een 3 java sorting collections comparator

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

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"));
        }
    });
Run Code Online (Sandbox Code Playgroud)

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

如何按两个类别对地图列表进行排序?

根据值对地图列表进行排序

由于我无法预测密钥,因此我无法从这些帖子中找到答案。有人可以帮忙解决这个问题吗?

Dar*_*hta 5

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

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;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)