我正在用 java 重新创建类似于 pandas dataframe 的东西来读取 csv 文件和操作数据。我将所有代码都编码为通用的,以处理 csv 文件中的任何类型的列,以及自动声明包装类,例如 Integer 和 Double(如果它是数字)。问题是现在我正在编写只涉及数字列的函数,但我仍然需要进行大量的强制转换以获得实际值,我想找到一个更优雅的解决方案。我已经尝试在方法中进行强制转换并且它有效但是我正在寻找一种方法来返回数值如果它是列类中的数字以避免为将来的函数这样做: //the basic structure public class Column<T> { public String type; //column type public String name; //column name public ArrayList<T> values; //array of values... public T getValue(int index) { return values.get(index); }}//in another file is the problempublic static double variance(Column c) { double mean = mean(c); double var = 0; for(int i = 0;i < c.getLength();i++) { // here is the problem var = Math.pow((((Number) c.getValue(i)).doubleValue()-mean),2); } return var/c.getLength(); }
1 回答
跃然一笑
TA贡献1826条经验 获得超6个赞
如果您可以自由地修改您的Column类或创建另一个更具体的子类,而不是在对象外部进行强制转换,您可以添加方法以在内部返回一个双精度数(如果它是双精度型),如果它是一个整数则返回一个整数等,因为在您的示例中,您知道那Column是一个Column<Number>. 例如:
public class DoubleColumn extends Column<Number> {
@Override
public Double getValue(int index) {
return super.getValue(index).doubleValue();
}
}
然后,您可以相应地修改方差方法以采用 aDoubleColumn而不是 a Column。
添加回答
举报
0/150
提交
取消