java - 根据 map 列表中的键比较值

标签 java comparator

我有一个字符串到字符串的映射,我想根据 kay F 的值对映射进行排序,但我的代码无法执行此操作。请指教。

    Map<String, String> h = null;
    Map<String, String> h1 = null;
    Map<String, String> h2 = null;
    listSummaryMap = new ArrayList<Map<String, String>>();

    h = new HashMap<String, String>();
    h.put("SUCCESS", "27");
    h.put("TOTAL_HOTELS", "86");
    h.put("F", "86");
    h.put("RESERVATION_MODE", "86");
    h.put("PARTNER_NAME", "86");

    h1 = new HashMap<String, String>();
    h1.put("SUCCESS", "27");
    h1.put("TOTAL_HOTELS", "86");
    h1.put("F", "36");
    h1.put("RESERVATION_MODE", "86");
    h1.put("PARTNER_NAME", "86");

    h2 = new HashMap<String, String>();
    h2.put("SUCCESS", "27");
    h2.put("TOTAL_HOTELS", "86");
    h2.put("F", "28");
    h2.put("RESERVATION_MODE", "86");
    h2.put("PARTNER_NAME", "86");

    listSummaryMap .add(h);
    listSummaryMap .add(h1);
    listSummaryMap .add(h2);


    Collections.sort(listSummaryMap , new Comparator<Map<String, String>>() {
        @Override
        public int compare(Map<String, String> o1, Map<String, String> o2) {
            return o2.get("F").compareTo(o1.get("F"));
        }
    });

最佳答案

String转换为Integer并作为Integer进行比较:

    public int compare(Map<String, String> o1, Map<String, String> o2) {
        return Integer.valueOf(o2.get("F")).compareTo(Integer.valueOf(o1.get("F")));
    }

这是假设 "F" 键始终存在于 Map 中,并且其值始终可以解析为 Integer .

顺便说一句,我不知道您将 Map 添加到 listSummaryMap 的位置。您是否忘记在问题中包含该代码?

关于java - 根据 map 列表中的键比较值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39695964/

相关文章:

java okhttp手动关闭连接问题

java - JOOQ 插入式

java - Apache CXF 无法发送消息

java - CPU日志解析、分组和报告

java - Comparator 接口(interface)的 equals 方法,为什么不覆盖 Object.equals(Object) 总是安全的

Java-对具有多个小数点的字符串进行排序

java - Collections.sort 比较方法违反了它的通用契约

java - 如何使用 HttpURLConnection 与网站交互?

java - 在内部存储中创建新文件异常 : java. io.IOException:打开失败:ENOENT(没有这样的文件或目录)

c++ - 在STL容器中使用比较函数