Java 首先根据值对哈希映射进行排序,然后按第二个键排序

Java 首先根据值对哈希映射进行排序,然后按第二个键排序,java,sorting,hashmap,Java,Sorting,Hashmap,我需要对哈希映射进行排序,首先根据值,然后根据键 TreeMap<String,Integer> dictionary = new TreeMap<String,Integer>(); 我尝试了树形图,但那个只是根据键对它进行排序。 所以基本上,我需要首先根据从高到低的整数,然后根据字符串A,B到Z排序。 我在网上搜索了一下,发现我必须使用比较器,但我不知道如何使它工作? 任何指导都将不胜感激 这是一个Java任务。我假设这是一个类似Java的任务。排序贴图只处理键,不

我需要对哈希映射进行排序,首先根据值,然后根据键

TreeMap<String,Integer> dictionary = new TreeMap<String,Integer>();
我尝试了树形图,但那个只是根据键对它进行排序。 所以基本上,我需要首先根据从高到低的整数,然后根据字符串A,B到Z排序。 我在网上搜索了一下,发现我必须使用比较器,但我不知道如何使它工作? 任何指导都将不胜感激


这是一个Java任务。

我假设这是一个类似Java的任务。排序贴图只处理键,不处理值。您可能只想将地图内容加载到一个新的树状图中,其中每个键都是原始键和值的组合。或者,您可以加载到一个列表中并对其排序,或者使用一个集合。

我假设这类似于Java。排序贴图只处理键,不处理值。您可能只想将地图内容加载到一个新的树状图中,其中每个键都是原始键和值的组合。或者,您可以加载到列表中并对其进行排序,或者使用集合。

地图界面没有顺序概念,但您可以对条目进行排序:

如果java 8可用,它将变得更加整洁:

Map<String, Integer> map; // populated
map.entrySet().stream()
    .sorted( (a, b) -> a.getValue().equals(b.getValue()) ? a.getKey().compareTo(b.getKey()) : Integer.compareTo(b.getValue(), a.getValue()))
    .map(e -> entry.getKey() + " - " + entry.getValue())
    .forEach(System.out::println);

如果绝对需要映射,请将它们加载到aLinkedHashMap中,该映射会保留顺序,因为它会按照插入条目的相同顺序对条目进行迭代。

映射界面没有顺序概念,但您可以对条目进行排序:

如果java 8可用,它将变得更加整洁:

Map<String, Integer> map; // populated
map.entrySet().stream()
    .sorted( (a, b) -> a.getValue().equals(b.getValue()) ? a.getKey().compareTo(b.getKey()) : Integer.compareTo(b.getValue(), a.getValue()))
    .map(e -> entry.getKey() + " - " + entry.getValue())
    .forEach(System.out::println);

如果需要一个映射,将它们加载到Alin KeDHMAP中,这样就保持了顺序,因为它按照插入的顺序迭代它的条目。

你应该用标签来识别语言,它是C++吗?您还应该显示所需的输出-或者这是您已经显示的吗?据我记忆所及,狄更斯没有提到斑马。☺你应该用标签来识别语言,它是C++吗?您还应该显示所需的输出-或者这是您已经显示的吗?据我记忆所及,狄更斯没有提到斑马。☺@locha通过颠倒顺序而不是-diff修复了比较问题。另外,迭代条目集有什么问题?@Loc Ha如何将上述方法应用于linkedhashmap。。。我已经制定了将它们添加到linkedhashmap的方法,并且它们可以工作。。我只是无法将上述方法应用于linkedhashmap。@bawa将结果收集到一个新的linkedhashmap中您在新的linkedhashmap中似乎缺少一个右括号Comparator@locha通过颠倒顺序而不是-差异进行固定比较,迭代条目集有什么问题?@Loc Ha如何将上述方法应用于linkedhashmap。。。我已经制定了将它们添加到linkedhashmap的方法,并且它们可以工作。。我只是无法将上述方法应用于linkedhashmap。@bawa将结果收集到一个新的linkedhashmap中您似乎在新的Comparator中缺少一个右括号
Map<String, Integer> map; // populated
map.entrySet().stream()
    .sorted( (a, b) -> a.getValue().equals(b.getValue()) ? a.getKey().compareTo(b.getKey()) : Integer.compareTo(b.getValue(), a.getValue()))
    .map(e -> entry.getKey() + " - " + entry.getValue())
    .forEach(System.out::println);