将Double转换为Integer

时间:2014-08-06 11:33:10

标签: java

我遇到了投射问题。我似乎无法弄清楚问题,因为一切似乎都是有序的。我理解,要从Double包装类显式转换为Integer包装类,它可以完成,但我的编译器无法识别它。我错过了一些明显的东西吗?

我得到的确切错误是:“不可转换的类型;无法将'double'强制转换为'java.lang.Integer'。

感谢您的帮助!

private HashMap<String, Integer> shortestPath(String currentVertex, Set<String> visited) {
        double tempVal = Double.POSITIVE_INFINITY;
        String lowestVertex = "";

        Map<String, Integer> adjacentVertex = this.getAdjacentVertices(currentVertex);
        HashMap<String, Integer> lowestCost = new HashMap<String, Integer>();

        for(String adjacentNames : adjacentVertex.keySet()) {
            Integer vertexCost = adjacencyMap.get(currentVertex).get(adjacentNames);
            if(!visited.contains(adjacentNames) && (vertexCost < tempVal)) {
                lowestVertex = adjacentNames;
                tempVal = vertexCost;
            }
        }
        lowestCost.put(lowestVertex, (Integer)tempVal);

        return lowestCost; 
    }

3 个答案:

答案 0 :(得分:3)

您无法直接从Double转换为Integer。您需要执行以下操作:

Double d = new Double(1.23);
int i = d.intValue();

How to convert Double to int directly?

中所述

答案 1 :(得分:0)

试试这个

 lowestCost.put(lowestVertex, (Integer) new Double(tempVal).intValue());

希望它能解决您的问题

答案 2 :(得分:0)

这似乎是最简单的:

lowestCost.put(lowestVertex, (int) tempVal);

首先,明确地转换为int,然后让编译器将int值自动装箱到Integer

请注意,这也消除了创建其他答案所暗示的各种助手一次性对象的需要(额外Double甚至String)。这是我能想到的最有效的方式(此时此刻)。