有没有一种简单的方法可以返回整数值和/或双精度值?

我正在用 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 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();

  }


繁星淼淼
浏览 97回答 1
1回答

跃然一笑

如果您可以自由地修改您的Column类或创建另一个更具体的子类,而不是在对象外部进行强制转换,您可以添加方法以在内部返回一个双精度数(如果它是双精度型),如果它是一个整数则返回一个整数等,因为在您的示例中,您知道那Column是一个Column<Number>. 例如:public class DoubleColumn extends Column<Number> {&nbsp; &nbsp; @Override&nbsp; &nbsp; public Double getValue(int index) {&nbsp; &nbsp; &nbsp; &nbsp; return super.getValue(index).doubleValue();&nbsp; &nbsp; }}然后,您可以相应地修改方差方法以采用 aDoubleColumn而不是 a Column。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java