查找包含最小整数值的HashMap的键

时间:2014-02-14 11:09:46

标签: java iterator hashmap

我正在为需要学习最常用单词的年轻学生创建一款教育游戏。随机我选择列表中的三个单词,在屏幕上显示它们,播放三个单词之一的录音,然后学生必须选择已发音的单词。我记录了他们猜到每个单词的次数。通过这种方式,我可以为何时应该向学生介绍新单词设置标准。当我选择了三个单词时,我想发出学生最不喜欢的单词。

我有一个名为words的HashMap,它包含单词,以及学生猜到单词的次数的整数值。

  HashMap<String,Integer>  words 

它包含10到120个键/单词。我想创建一个方法,它将三个哈希映射键作为参数,可以返回具有所需键的最低值的String /键。

我已经让这个按照预期的方式工作了,我会感激任何帮助。

5 个答案:

答案 0 :(得分:3)

这个怎么样?

private String getMinKey(Map<String, Integer> map, String... keys) {
    String minKey = null;
    int minValue = Integer.MAX_VALUE;
    for(String key : keys) {
        int value = map.get(key);
        if(value < minValue) {
            minValue = value;
            minKey = key;
        }
    }
    return minKey;
}

答案 1 :(得分:3)

首先从地图中获取条目集:

Set<Entry<String,Integer>> entries = map.entrySet();

现在将其转储到ArrayList中,以便对其进行排序:

List<Entry<String,Integer>> sortedEntries = new ArrayList<>(entries);

现在对列表进行排序:

Collections.sort(sortedEntries, /*Define your comparitor here to compare by values */);

您的列表现在具有按值排序的地图内容,您可以按照您喜欢的顺序访问它们。

答案 2 :(得分:2)

这是user3309578答案的变体         static HashMap words = new HashMap();

private static String getMax () {
    String minKey = null;
    int minValue = Integer.MAX_VALUE;
    for (String key : words.keySet()) {
        int value = words.get(key);
        if (value < minValue) {
            minValue = value;
            minKey = key;
        }
    }
    return minKey;
}

public static void main (String[] args) {
    words.put("a", 2);
    words.put("b", 4);
    words.put("c", 6);
    words.put("d", 8);
    words.put("e", 1);
    words.put("f", 3);
    words.put("g", 5);
    words.put("h", 7);
    System.out.println(getMax());
}

答案 3 :(得分:1)

可能是最短的解决方案,使用Java 8:

private String getMinKey(Map<String, Integer> map, String... keys) {

    return map.entrySet().stream()
     .filter(p -> Arrays.asList(keys).contains(p.getKey()))
     .min(Comparator.comparingInt(Map.Entry::getValue)).get().getKey();

}

答案 4 :(得分:0)

我做了这个,它可以按住多个键=

HashMap<String,Integer>hashmap_original=new HashMap<>();
        hashmap_original.put("key_1",1);
        hashmap_original.put("key_2",4);
        hashmap_original.put("key_3",1);
        hashmap_original.put("key_4",3);

        HashMap<String,Integer>hashmap_result=new HashMap<>();
        int int_minium_value = 9999; //put a maxium value that u know your code it wont pass it
        for (String String_key:hashmap_original.keySet()) {
            int int_compare_value=hashmap_original.get(String_key); //get the value

            if (int_compare_value<int_minium_value) {
                int_minium_value=int_compare_value;
                hashmap_result.clear(); //delete non min values
                hashmap_result.put(String_key,int_compare_value);
            } else if (int_compare_value==int_minium_value) {
                hashmap_result.put(String_key,int_compare_value);
            }

        }
        String result=null;//u can use a ArrayList
        for (String key_with_the_lowest_value : hashmap_result.keySet()) {
            if (result == null) {
                result = key_with_the_lowest_value;
            } else {
                result=result+","+key_with_the_lowest_value;
            }
        }