在Java中将Object[]转换为double[]

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>();
}

1
为什么v需要是一个对象数组? - Ben Green
1
我会将singleValues定义为TDoubleArrayList,这样你就可以调用toArray()方法返回一个double[]。注意:double[]不是Object[],因为double不是一个Object - Peter Lawrey
@BenGreen 这并不是问题,我只是想拿来尝试将其转换为 double []。 - user2007843
1
注意任何 long -> double 的转换,因为会有精度损失。因此,如果您正在处理高精度数字,可能会遇到问题。 - TheMerovingian
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();
}

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


1
或者只需使用v.doubleValue(),因为Long是Number的一个实例。 - yshavit

2
为了将类型为 Object[] 的数组“转换”为 double[],您需要创建一个新的 double[] 并用类型为 double 的值填充它,这些值是通过单独从输入数组中转换每个 Object 获得的,可能在循环中进行。

0

这有点像一些不好的做法。
首先,我不鼓励您使用数组,而是使用Map或List。

如果您需要将值作为double返回,请创建一个getter方法

private List<Long> myList;
//initialize somewhere

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

并添加一个转换器,例如getMyListAsDoubleArray(),如果您确实必须使用数组,则进行转换。您可以查看此处的答案解决方案,例如Matthias Meid的解决方案。


我必须使用数组,因为我正在制作一个图表,而方法dataset.addSeries只接受double [] - user2007843
@user2007843 我明白了,我仍然建议制作一个转换器而不是在本地完成工作。 - CsBalazsHungary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接