如何基于Java中的内部地图键值之一对Map <string,map <string,=“” string =“” >>进行排序

时间:2019-01-02 15:22:05

标签: java sorting hashmap

我在Java中有一个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 对哈希图进行排序。你能帮我吗?

我对外部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" }

谢谢。

1 个答案:

答案 0 :(得分:0)

您无法按内部地图的键进行排序。此外,您无法对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安全的。