开发中需要调用第三方的库,有些 API 的入参要求是 double[] 数组,程序根据用户在页面的输入,计算出一个 double[] 作为返回值的结果,然后调用这个 API。
往往无法预先知道这个 double[] 数组的大小,就不能直接定义一个 double[] 的变量,只能借助 List,先将数据放入 List, 再转换为 double[] 数组。这个很简单,一个 for 循环就搞定了,但是使用 java 8 的 stream 特性就能让代码更优雅些。下面是我程序中的例子:
List<Double> factorValueList = new ArrayList<>();
for (Integer defId : input.getCohortDefIds()) {
for (double d : calcVarValues(defId, factorVar)) {
factorValueList.add(d);
}
}
double[] factorVarValues = factorValueList.stream().mapToDouble(Double::doubleValue).toArray();
List 本身有个 API, 是带参数的 toArray(),但是在某些情况下,转型后 Array 编译没问题,运行时报错,具体什么错我忘了,下次发现了再来更新文章。
为保险起见,还是使用 stream 最可靠,代码也好看。