6

这可能吗?我已经为此苦苦挣扎了一段时间。我最初是Long []先转换为,然后转换为double []哪个让我编译,然后给我一个转换错误。我现在被困住了。

在这段代码中,我正在遍历我的哈希图中的条目。

 Object[] v = null;
 for(Map.Entry<String,NumberHolder> entry : entries)
 {
       v = entry.getValue().singleValues.toArray(); //need to get this into double []
 }

这是我的 numberHolder 类

private static class NumberHolder
{
    public int occurrences = 0;
    public ArrayList<Long> singleValues = new ArrayList<Long>();
}
4

3 回答 3

7

非泛型toArray可能不是最佳的,我建议您改用for循环:

Long[] v = new Long[entry.getValue().singleValues.size()];
int i = 0;
for(Long v : entry.getValue().singleValues) {
  v[i++] = v;
}

现在你有一个对象数组Long而不是Object. 但是,Long是整数值而不是浮点数。你应该可以施放,但它闻起来像是一个潜在的问题。

您也可以直接转换而不是使用Long数组:

double[] v = new double[entry.getValue().singleValues.size()];
int i = 0;
for(Long v : entry.getValue().singleValues) {
  v[i++] = v.doubleValue();
}

概念:你不能在这里尝试转换数组,而是转换每个元素并将结果存储在一个新的数组中。

于 2013-04-22T14:00:31.220 回答
2

为了将类型数组“转换”Object[]double[]您需要创建一个新数组double[]并用 type 的值填充它double,您可以通过分别Object从输入数组中强制转换每个值来获得这些值,大概是在一个循环中。

于 2013-04-22T14:01:14.637 回答
0

This smells a bit as some bad practice.
First of all, I discourage you to use arrays, use Map or List.

If you need the values as double, make a getter which

private List<Long> myList;
//initialize somewhere

double getElementAsDouble(int index){
    return myList.get(index).doubleValue();
}

And add a converter like getMyListAsDoubleArray() where you make the conversion if you really have to use Array. You can check out the solution from the answers here, for example Matthias Meid's.

于 2013-04-22T14:15:49.883 回答