如何根据java中的内部映射键值之一对Map <String,Map <String,String>>进行排序[重复]
Posted
技术标签:
【中文标题】如何根据java中的内部映射键值之一对Map <String,Map <String,String>>进行排序[重复]【英文标题】:how to sort Map<String, Map<String, String>>, based on one of the inside map key value in java [duplicate] 【发布时间】: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"
谢谢。
【问题讨论】:
AHashMap
没有订单。您需要使用列表或SortedMap
。
查看树状图。 docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html您可以提供比较器或使用键的自然顺序。
【参考方案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 安全的。
【讨论】:
以上是关于如何根据java中的内部映射键值之一对Map <String,Map <String,String>>进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章