【问题标题】:How to create List<Double> fromapache's common math DescriptiveStatistics<Double>?如何从 apache 的常用数学 DescriptiveStatistics<Double> 创建 List<Double>?
【发布时间】:2014-07-24 07:46:11
【问题描述】:

我有一个变量DescriptiveStatistics stats,我想从中创建Double 数组。使用以下代码:

import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
//...
DescriptiveStatistics stats;
//...
Arrays.asList(stats.getValues())

我得到的是 List&lt;double[]&gt; 而不是 List&lt;Double&gt;stats.getValues() 返回double[]

我该如何解决这个问题并从此DescriptiveStatistics 获得List&lt;Double&gt;

【问题讨论】:

  • 这取决于stats.getValues() 返回什么?
  • 您可以使用 Guava 谓词和 Collection2。将您的域列表转换为不同的列表
  • @GriffeyDog 我该怎么做?

标签: java arrays statistics apache-commons-math


【解决方案1】:

根据Arrays.asList() 的方法签名,它返回作为传入参数的类型列表。

public static <T> List<T> asList(T... a)

例如:

double[] array=new double[]{1,2,3};
List<double[]> list=Arrays.asList(array); // Here T is `double[]` List of size 1

...

double[][] array = new double[][] { { 1, 2, 3 }, { 4, 5, 6 } };
List<double[]> list=Arrays.asList(array); // Here T is `double[]` List of size 2

...

List<Double> list=Arrays.asList(1.0,2.0,3.0); // Here T is double List of size 3

根本原因:

由于数组本身是一个对象,在您的情况下,double[] 被视为单个对象,而不是按照 Generic 的双精度数组,因此返回 List&lt;double[]&gt; 而不是 List&lt;Double&gt;

解决方案 1

你可以通过简单的经典代码来解决它:

double[] array = new double[] { 1, 2, 3 };
List<Double> list = new ArrayList<Double>();
for (double d : array) {
    list.add(d);
}

解决方案 2

只需将方法stats.getValues()的返回类型从double[]更改为Double[]

Double[] array = new Double[] { 1.0, 2.0, 3.0 };
List<Double> list = Arrays.asList(array);

【讨论】:

  • 我最终需要遍历数组(解决方案 1)。
  • 很好,继续。经典是所有类型的最爱。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
相关资源
最近更新 更多