【问题标题】:converting Object [] to double [] in java在java中将Object []转换为double []
【发布时间】:2013-04-15 11:12:18
【问题描述】:

这可能吗?我已经为此苦苦挣扎了一段时间。我最初是先转换为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>();
}

【问题讨论】:

  • 为什么 v 需要是一个对象数组?
  • 我会将 singleValues 设为 TDoubleArrayList,它允许您调用 toArray() 以返回 double[] 注意:double[] 不是 Object[],因为 double 不是Object
  • @BenGreen 不是我只是要接受它并尝试让它翻倍[]
  • 小心long -&gt; double 的任何转换,因为会损失精度。因此,如果您使用的是高度精确的数字,您可能会遇到问题

标签: java arrays object double


【解决方案1】:

这听起来有点像一些不好的做法。
首先,我不鼓励你使用数组,使用 Map 或 List。

如果您需要双精度值,请创建一个 getter

private List<Long> myList;
//initialize somewhere

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

如果你真的必须使用 Array,则添加一个像 getMyListAsDoubleArray() 这样的转换器。您可以从此处的答案中查看解决方案,例如 Matthias Meid 的。

【讨论】:

  • 我必须使用数组,因为我正在制作图表并且方法dataset.addSeries只接受double []
  • @user2007843 我明白了,我仍然建议制作转换器而不是在本地完成工作。
【解决方案2】:

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

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

【讨论】:

  • 或者只是v.doubleValue(),因为Long instanceof Number。
【解决方案3】:

为了将Object[] 类型的数组“转换”为double[],您需要创建一个新的double[] 并使用double 类型的值填充它,您将通过转换每个@987654325 来获得@ 从输入数组中分开,大概在一个循环中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2023-01-23
    • 2013-04-01
    • 2022-01-10
    • 2014-11-06
    • 1970-01-01
    相关资源
    最近更新 更多