首页 > 解决方案 > 如何修复在 Java 中使用重复值获取 Key By Value

问题描述

我想通过地图中的重复值来获取密钥,但结果不正确,例如我有这个代码

import java.util.*;
import java.util.Map.*;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("A", 10);
        map.put("B", 20);
        map.put("C", 30);
        map.put("D", 10);
        map.put("E", 11);
        map.put("F", 30);

        System.out.println("Before Sorting:");
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue());
        }

        List<Integer> list = new ArrayList<>(map.values());
        Collections.sort(list);
        Collections.reverse(list);

        System.out.println("\nAfter Sorting:");
        for (Integer entry : list) {
            System.out.println(getKeyByValue(map, entry) + " - " + entry);
        }
    }

    public static <String, Integer> String getKeyByValue(
        Map<String, Integer> map, Integer value) {
        for (Entry<String, Integer> entry : map.entrySet()) {
            if (entry.getValue().equals(value)) {
                return entry.getKey();
            }
        }
        return null;
    }

}

现在输出的结果是

Before Sorting:
A - 10
B - 20
C - 30
D - 10
E - 11
F - 30

After Sorting:
C - 30
C - 30
B - 20
E - 11
A - 10
A - 10

目标是按降序对值进行排序,然后从值中获取键,但由于存在重复值,我无法获取键

After Sorting should be:
F - 30
C - 30
B - 20
E - 11
D - 10
A - 10

有什么建议吗?

标签: java

解决方案


推荐阅读