如何获取和比较map <integer,integer =“”>的值结果

时间:2017-07-25 19:06:29

标签: java hashmap

通过调用方法,在我的情况下countInNumbers,将结果作为数组返回。

System.out.println(countIntInNumbers(Array));

结果:

{1=17, 2=10, 3=16, 4=17, 5=13, 6=22, 7=10, 8=15, 9=16, 10=19, 11=11, 12=15, 13=16, 14=13, 15=19, 16=17, 17=13, 18=21, 19=19, 20=15,}

我尝试根据总价值将不同表格上的数字分开。 示例...我想显示其总数在3到4之间的数字,以分隔表而不是其他数字。

面对这个问题导致你可能会注意到的结果是Map,因为我是Java新手,我现在很困惑。

任何人都可以从某事开始建议吗?

更新::: countIntInNumbers方法如下

public static Map<Integer, Integer> countIntInNumbers(int[][] mat) {
    Map<Integer, Integer> intOccurences = new HashMap<>();
    for (int[] row : mat) {
        for (int intInRow : row) {
            Integer occurences = intOccurences.get(intInRow);
            if (occurences == null) { // first occurrence
                intOccurences.put(intInRow, 1);
            } else { // increment
                intOccurences.put(intInRow, occurences.intValue() + 1);
            }

        }

    }
    return intOccurences;

2 个答案:

答案 0 :(得分:0)

如果你想比较地图的价值,只需按键获取即可。然后由于map的值是包装器Integer,你可以使用==,&gt; =,&lt; =进行比较,因为Integer equals()方法只是将它包装的int值与另一个Integer的int值进行比较。例如:

 // Adding some test values to the map
 Map<Integer, Integer> map = new HashMap<>();
 map.put(1, 5);
 map.put(2, 6);
 map.put(3, 5);

 // Get values by key map.get(key)
 // Compare values map.get(key) == map.get(key) or use >=, <=
 System.out.println(map.get(1) <= map.get(2)); // true
 System.out.println(map.get(1) == map.get(3)); // true
 System.out.println(map.get(1) >= map.get(2)); // false

在countIntInNumbers中,您似乎只是使用其toString()方法返回并打印地图。如果我说得对,你想打印值在3到4之间的键。在这种情况下,值是Integer,所以除了整数本身之外,3和4之间不会有任何值。

好的,在看到您的编辑后,将原始矩阵转换为地图,然后搜索您需要的值,并将它们放入新地图中。像这样:

public static Map<Integer, Integer> countIntInNumbers(int[][] mat) {
    Map<Integer, Integer> matConvertedToMap = new HashMap<>();

    for(int i=0; i<mat.length; i++)
    {
        matConvertedToMap.put(mat[i][0], mat[i][1]);
    }

    Map<Integer, Integer> intOccurences = new HashMap<>();

    for (Map.Entry<Integer, Integer> entry : matConvertedToMap.entrySet())
    {
        if(entry.getValue() ==  3 || entry.getValue() ==  4)
        {
            intOccurences.put(entry.getKey(), entry.getValue());
        }
    }

    return intOccurences;
}

不确定比较到底是什么以及您希望返回什么,但这应该让您对如何迭代地图有一般感觉。

答案 1 :(得分:0)

  

我尝试根据总价值将不同表格上的数字分开。示例...我想将其总数在3到4之间的所有数字打印到单独的表中,而不是其他数字。

我们不确定您在这里问的是什么,但如果您想要显示总数在2个数字之间的数字,那么您可以执行以下操作:

private void printNumbers(Map<Integer, Integer> intOccurences, int minTotal, int maxTotal){
    boolean first = false;
    System.out.print("{");
    for (Map.Entry<Integer, Integer> entry : intOccurences.entrySet()) {
        int total = entry.getValue();
        if (total >= minTotal && total <= maxTotal) {
            if (first) {
                first = false;
            } else {
                System.out.print(", ");
            }
            System.out.print(entry.getKey() + "=" + total);
        }
    }
    System.out.print("}");
}

如果您正在将复制值转移到新地图,那么可能会出现以下情况:

private Map<Integer, Integer> extractNumbers(Map<Integer, Integer> intOccurences,
       int minTotal, int maxTotal) {
    Map<Integer, Integer> result = new HashMap<>();
    for (Map.Entry<Integer, Integer> entry : intOccurences.entrySet()) {
        int total = entry.getValue();
        if (total >= minTotal && total <= maxTotal) {
            result.put(entry.getKey(), total);
        }
    }
    // not sure if you want to remove the ones from the original map
    return result;
}