java - 交换 HashMap 中特定的<key,value>集

标签 java sorting java-8 hashmap mapping

我使用 <String,Integer> 的映射、姓名(唯一)和年级。 我进行了排序,因此最高等级排在第一位(及其键值)。 但是,如果两个成绩相同,我需要按字母顺序打印它们。

到目前为止,我得到了这个,它按值降序排列:

public  <String, Integer extends Comparable<? super Integer>> Map<String, Integer> sortByValue(Map<String, Integer> map) {
    List<Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
    list.sort(Entry.comparingByValue());



    //actually need descending order, so use comparator to change from natural ordering
    Comparator comparator = Collections.reverseOrder();
    list.sort(Entry.comparingByValue(comparator));


    Map<String, Integer> result = new LinkedHashMap<>();
    for (Entry<String, Integer> entry : list) {
        result.put(entry.getKey(), entry.getValue());
    }
    return results;
}

我尝试通过复制到 ArrayList 来工作,尽管我感觉走进了死胡同:

   List<String> listnames = new ArrayList<>();
    for(String names :  result.keySet()){
        listnames.add(names);
    }
    List<Integer> listgrades = new ArrayList<>();
    for(Integer grades :  result.values()){
        listgrades.add(grades);
    }


for (int i = 0 ; i<result.size() ; i ++){
    if(listgrades.get(i).equals(listgrades.get(i+1))){
        result.get(listgrades.);
        //.....

    }
}

任何帮助/提示表示赞赏!

最佳答案

您可以同时按两个属性排序:

Comparator<Entry<String, Integer>> comparator = Comparator.comparing(Entry::getValue);
Comparator<Entry<String, Integer>> comparator2 = comparator.reversed(); // Here sort the grade in reversed order (highest come first)
Map<String, Integer> sortedMap = map.entrySet().stream()
                  .sorted(comparator2.thenComparing(Entry::getKey))
                  .collect(toMap(Entry::getKey, Entry::getValue,
                           (v1, v2) -> v2, LinkedHashMap::new));

引入 Map 让事情变得更加复杂.

您可以对 List<Student> 执行相同的操作哪里Student {name; grade}

关于java - 交换 HashMap 中特定的<key,value>集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50432499/

相关文章:

java - 如何设置 HADOOP_CLASSPATH 以将本地文件系统与本地作业运行器一起使用?

java - 在 Java 中对 Sprite 的 ArrayList 进行排序

java - 默认方法一会返回true,然后返回false? (可能的 JVM 错误)

java - c3p0 Java 数据库池,故障转移配置

java - 使用 CSVWriter 将列表写入 CSV 文件的问题

javascript - 使用标准数组值对数组进行排序或排列

c++ - 在 C++ 中使用链表对距原点、x 和 y 坐标的距离进行排序

java - 使用替代品在 centos 上安装 java

Java 8 嵌套(多级)分组依据

java - 从 JavaScript gwt 调用 Java