基于地图列表中的关键值的比较

时间:2016-09-26 06:25:03

标签: java comparator

我有一个String to String的地图,我想根据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"));
        }
    });

3 个答案:

答案 0 :(得分:2)

String转换为Integer并比较为Integer s:

    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的位置。您是否忘记在问题中包含该代码?

答案 1 :(得分:0)

首先需要将String转换为整数然后比较将像这样工作。

$(function() {

var $data = $('#content');
$.ajax({
   type:'GET',
   dataType:'jsonp',
   url:'https://syncslider-ehnoxx07.c9users.io/default-preview-template.php',
   success: function (data) {
   $('#content').html(data)
 });
});

答案 2 :(得分:0)

您忘记将地图添加到列表中,并且从未初始化地图h3。拆开你的代码已经按原样运行,但是将地图从最高id到最低进行排序。如果您将比较行更改为:

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

然后它会按照“F”从最低值到最高值对地图进行排序。

希望有所帮助