我正在用Java重新创建类似于pandas数据框的内容,以读取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 problem
public 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();
}
答案 0 :(得分:0)
如果您可以自由修改Column
类或创建另一个更具体的子类,而不必在对象外部进行强制转换,则可以添加方法以在内部返回double值(如果它是double值),则返回int (如果是int等),因为在您的示例中您知道Column
是Column<Number>
。例如:
public class DoubleColumn extends Column<Number> {
@Override
public Double getValue(int index) {
return super.getValue(index).doubleValue();
}
}
然后,您可以相应地修改方差方法以采用DoubleColumn
而不是Column
。