【问题标题】:how to sort Map<String, Map<String, String>>, based on one of the inside map key value in java [duplicate]如何根据java中的内部映射键值之一对Map <String,Map <String,String>>进行排序[重复]
【发布时间】:2019-05-29 06:01:21
【问题描述】:

我在 java 中有一个 hashMap,想根据其中一个键值进行排序。 我的 hashmap 如下所示。

HashMap= < string, map <string,string> >

key="toUppercase" -> value={ key="column_positions" -> value="4,5" ,
                             key="rule_order" -> value="3" }
key="replace" -> value= { key= "column_positions"-> value= "1,2" ,
                          key= "rule_order"-> value= "1" }
key= "concat" -> value={key= "column_positions"-> value= "6,7"
                        key ="rule_order"-> value= "2" }

我想根据 rule_order 对 hashmap 进行排序。你能帮帮我吗?

我对外部 hasmap 的预期输出是:

HashMap= < string, map <string,string> >

key="replace" -> value= { key= "column_positions"-> value= "1,2" ,
                          key= "rule_order"-> value= "1" }
key= "concat" -> value={key= "column_positions"-> value= "6,7"
                        key ="rule_order"-> value= "2" }
key="toUppercase" -> value={ key="column_positions" -> value="4,5" ,
                             key="rule_order" -> value="3" }

谢谢。

【问题讨论】:

标签: java sorting hashmap


【解决方案1】:

您不能按内部映射的键进行排序。此外,您无法对 HashMap 进行排序。 您可以使用 TreeMap 但将 ruleOrder 作为键。但在这种情况下,您将无法存储重复项。 (具有相同的规则顺序)。 您可以在运行时对地图进行排序:

Map<String, Map<String, String>> map = new HashMap<>();
 map.entrySet()
     .stream()
     .sorted(Comparator.comparing(en -> en.getValue().get("rule_order")))
     .forEach(this::doWork);

请将this::doWork 替换为需要的代码。 请注意,此示例不是 null 安全的。

【讨论】:

    猜你喜欢
    • 2015-01-18
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    相关资源
    最近更新 更多