我在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" }
谢谢。
答案 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安全的。