如何在java中从类类型对象转换为double类型

时间:2015-02-12 09:05:26

标签: java list object casting subtraction

我有一种方法可以从两个不同的列表中减去两个类的类型。减法的代码是

public LinkedHashMap<String, List<Double>> diff()
  { 
      List<Double> z=new ArrayList<Double>();
     for(int i=0;i<st_jsp.size()&&i<ref_jsp.size();i++){
         Double x=(double) ref_jsp.get(i);
         Double y=st_jsp.get(i);

          if(x>y){
              z.add(x-y);
          }
          else{
          z.add(y-x);
          }

          dif.put("", z);
       }

    return dif;

  }

这里st_jsp和ref_jsp是两个列表,例如List<Ref_user_interface> st_jsp=new ArrayList<Ref_user_interface>();List<Ref_user_interface> st_jsp=new ArrayList<Ref_user_interface>(); Ref_user_interface是我的类名。 这两个列表以下列方式保存值 -

 ref.setSt1_vs1_bag6_rb(rs.getDouble(8));
 ref.setSt1_vs1_bag7_rb(rs.getDouble(9));
 ref.setSt1_vs1_bag8_rb(rs.getDouble(10));
 st_jsp.add(ref);

其中ref为Ref_user_interface ref=new Ref_user_interface(); 在我的减法方法中,我得到一个**无法从行Double x= ref_jsp.get(i);Double y=st_jsp.get(i);上的Ref_user_interface转换为Double **。 有没有什么办法可以从两个列表中减去我的值来保存对象类型的数据。?

修改-1 我有getter和setter方法。但是对于list的每个值,我是否必须包含getter方法?对于我的getter和setter方法,请访问链接setter method of mine

修改-2

我用你的所有答案改变了我的减法方法 -

public LinkedHashMap<String, List<Double>> diff()
  {  

     List<Double> z=new ArrayList<Double>();

     for(int i=0;i<st_jsp.size()&&i<ref_jsp.size();i++)
     {
            Comaprision refObj = ref_jsp.get(i);
            Comaprision stObj = st_jsp.get(i);
            Double x =refObj.getBeam_current();
            x+=refObj.getBeam_energy();
            x+=refObj.getSt2_vs2_bag1_rb();
            x+=refObj.getSt2_vs2_bag2_rb();
            x+=refObj.getSt2_vs2_bag3_rb();
            x+=refObj.getSt2_vs2_bag4_rb();
            x+=refObj.getSt2_vs2_bag5_rb();
            x+=refObj.getSt2_vs2_bag6_rb();
            x+=refObj.getSt2_vs2_bag7_rb();
            x+=refObj.getSt2_vs2_bag8_rb();
            x+=refObj.getSt2_vs2_bag9_rb();
             Double y = stObj.getBeam_current();
            y+=stObj.getBeam_energy();
            y+=stObj.getSt2_vs2_bag1_rb();
            y+=stObj.getSt2_vs2_bag2_rb();
            y+=stObj.getSt2_vs2_bag3_rb();
            y+=stObj.getSt2_vs2_bag4_rb();
            y+=stObj.getSt2_vs2_bag5_rb();
            y+=stObj.getSt2_vs2_bag6_rb();
            y+=stObj.getSt2_vs2_bag7_rb();
            y+=stObj.getSt2_vs2_bag8_rb();



          if((x>y)){

              z.add(x-y);
          }
          else{
          z.add(y-x);

          dif.put("", z);

       }
    return dif;

  }

但是我无法理解是否正在添加1索引处的所有值,然后在索引1处与y进行comapred等等。此循环为我提供了42个值。我的 ref_jsp 具有21行和 st_jsp 有78行,但这些行的值重复两次。我无法理解这个循环。请帮我解释。我不知道。想要在索引处添加我的值

我的实际问题是 - &gt; 我只是想比较x的每个索引的getter的值和y的每个索引的getter的值,并找出差异。

2 个答案:

答案 0 :(得分:3)

事情是你的列表返回Ref_user_interface的对象,所以你可以通过调用像

这样的getter方法获得值
ref_jsp.get(i).getSt1_vs1_bag6_rb()

如果您想要所有的getter方法,请在for循环中尝试这个

for(int i=0;i<st_jsp.size()&&i<ref_jsp.size();i++){
    Ref_user_interface refObj = ref_jsp.get(i);
    Ref_user_interface stObj = st_jsp.get(i);
    Double x = refObj.getSt1_vs1_bag6_rb();
    Double y = stObj.getSt1_vs1_bag6_rb();
    comparing(x,y);
    x =refObj.getSt1_vs1_bag7_rb();
    y = stObj.getSt1_vs1_bag7_rb();
    comparing(x,y)

     // and so on for all the getters method you have for this obj

     public void comparing(Double x,Double y){
           // write your comparing logic here and add value in map
          if(x > 0 && y > 0){
              if(x>y){
                 z.add(x-y);  
              }else{
                 z.add(y-x); 
              }  
          }else if(x>0){
             z.add(x);
          }else{
             z.add(y);
          }     
     }

等等,你得到你想要的所有值,然后根据你的逻辑使用它。

答案 1 :(得分:2)

你需要像这个setter ref.setSt1_vs1_bag6_rb(rs.getDouble(8));这样的getter 。当你致电ref_jsp.get(i)时,它会返回Ref_user_interface,那么你需要调用新的getter方法来获得你想要的东西。

更新

Double[] dbl_x = new Double[ref_jsp.size()];
Double[] dbl_y = new Double[ref_jsp.size()];
for(int i=0; i<ref_jsp.size(); i++){
   dbl_x[i] = ref_jsp.get(i).getSt1_vs1_bag6_rb();
}

for(int i=0; i<ref_jsp.size(); i++){
   dbl_y[i] = st_jsp.get(i).getSt1_vs1_bag6_rb();
}

最后你有两个数组dbl_x和dbl_y,这些数组包含x和y值(你先前提到过)

然后你所要做的就是比较那两个数组并做出决定。

for(){
   if(dbl_x[i] > dbl_y[i]){
     // do this.
   }else{
     // do that.
   }
}

上面的代码片段将为您提供一个包含所需值的双精度数组。对其他一组值执行此操作并比较两个数组。

注意:getSt1_vs1_bag6_rb()是getter方法,它返回所需的值。阅读about getters here