迭代hashmap键并进行比较

时间:2014-12-02 01:58:17

标签: java arraylist iterator hashmap

我想迭代一个hashmap的每个键并将它与它下面的每个键进行比较(所以我不比较两次键)。 我想看看哪些斜坡彼此垂直。如果斜率的乘积是-1,它们就是,我会用这些键与arraylists做点什么。

到目前为止,我使用以下方法构建了地图:

Map<Double, List<Double>> map = new HashMap<Double, List<Double>>();

for(int i = 0; i < n; i++) {
    for(int j = i + 1; j < n; j++) {
        if(line[4][i] == line[4][j]) {
            double distance = 7.0;   //distance();

            List<Double> array = (map.containsKey(line[4][i])) ? map.get(line[4][i]):new ArrayList<Double>();
            array.add(distance);
            map.put(line[4][i], array);

            // System.out.println(Arrays.asList(array));
            // System.out.println(distance);
        }
    }
}

尝试使用以下内容迭代地图:

Iterator<Entry<Double, List<Double>>> i = map.entrySet().iterator();
while(i.hasNext()) {
    Entry next = i.next();
    i.remove();
    for(Entry e : map.entrySet()) {
        System.out.println(next + " " + e);

        //ERROR: The method parseDouble(String) in the type Double is not applicable for the arguments (Object)
        if((Double.parseDouble(next.getKey()) * (Double.parseDouble(e.getKey()))) == -1) 
            System.out.println("pair"); //do something 
    }
}

但是我无法将一个对象解析成一个double,而我却迷失了如何继续。任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

到你的问题,使用类型限定符作为下一个条目:

Map.Entry<Double, List<Double>> next = i.next();

也在这里:

Map.Entry<Double, List<Double>> e : map.entrySet()

然后编译器将知道getKey()将返回Doubles,并允许它们相互相乘。