首页 > 解决方案 > 基于java 8中的优先级对地图值进行排序

问题描述

{
    "response": [
        {
            "messages": [
                {
                    "parameters": {
                        "PRECEDENCE": "3",
                        "ENTITY_CLASS": "ACCOUNT"
                    }
                },
                {
                    "parameters": {
                        "PRECEDENCE": "16",
                        "ENTITY_CLASS": "PRODUCT"
                    }
                },
                {
                    "parameters": {
                        "PRECEDENCE": "1",
                        "ENTITY_CLASS": "ACCOUNT"
                    }
                }
            ]
        }
    ]
}

我希望输出应该按升序排序

{
    "response": [
        {
            "messages": [
                {
                    "parameters": {
                        "PRECEDENCE": "1",
                        "ENTITY_CLASS": "ACCOUNT"
                    }
                },
                {
                    "parameters": {
                        "PRECEDENCE": "3",
                        "ENTITY_CLASS": "PRODUCT"
                    }
                },
                {
                    "parameters": {
                        "PRECEDENCE": "16",
                        "ENTITY_CLASS": "ACCOUNT"
                    }
                }
            ]
        }
    ]
}

我目前的结构

Response 
        Set<essage> message
                        Map<String, String> parameters = new HashMap<>();
                        

我正在尝试通过手动比较。有没有一种方法可以迭代和排序地图值。

如何有效优化?

标签: javajava-8

解决方案


首先,如果订单对您很重要,我必须将消息类型从 aSet更改为。List

接下来,您必须Comparator为您Message实现简化排序方式,该compare方法可能如下所示:

    public int compareTo(Message msg1, Message msg2){
       return msg1.parameters.get("PRECEDENCE")
                  .compareTo(msg2.parameters.get("PRECEDENCE")) 
    }

不要忘记添加不同的空检查。

然后,您可以简单地调用response.messages.sort(new YourMessageComparator())以按优先级排序消息。


推荐阅读