Para ajustar un conjunto de resultados basado en otro conjunto de resultados en java [cerrado]

yo tengocuatro métodos, dos métodos a saberFindClosestToMultiplesOfTen () y ClosestToMultiplesOfTen_User () proporciona los valores de beam_current correspondientes al tiempo de registro ingresado a través del usuario.Otros dos métodos recuperan todos los demás campos en estas beam_current. Considero beam_current recuperado de FindClosestToMultiplesOfTen como referencia beam_current y se pasan a otro método, a saber, el método refernece () y se recuperan otros valores correspondientes. Se hacen cosas similares con otros dos métodos, a saber, ClosestToMultiplesOfTen_User y los valores de beam_current de él se pasan a refarray_vac1.Ahora calculo la diferencia de valores obtenidos de ambos métodos y se muestran a través de jsp apge.

Problema 1)Quiero que todos los valores correspondientes a beam_current recuperados del método refarray_vac1 () estén directamente debajo de los valores correspondientes de refernece (). La producción obtenida hasta ahora es-

Aquí puede ver que las filas que se muestran en color claro son de refarray_vac1 y se comparan con las filas representadas en color gris. Aquí, el valor cerca de 10 se representa debajo de la fila de referencia de 10, pero quiero que se represente debajo de la fila 20.02 de la referencia y nulo debe representarse debajo de la fila de color gris 10, ya que falta el valor de color claro 10. Entonces aparecerán todas las filas debajo de sus filas correspondientes.

Código de métodos es

public  LinkedHashMap<Double, String> FindClosestToMultiplesOfTen(String name) throws SQLException {

    int row_id ;
    int bIdx = 0;
    //double[] vals = new double[47];
    double[] vals=null;
    //double[] bucket =new double[22];
    int rowIndex = 0 ;
    int i=0;
    String first=name.substring(1,19);
    String last =name.substring(24,42);
     try
        { 
          con = getConnection();
          stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
          String sql="select distinct beam_current from INDUS2_BDS.dbo.DCCT where logtime between '"+first+"' and '"+last+"'"+
          "and (beam_current like '%9.95' or beam_current like '%9.96' or beam_current like '%9.97' or beam_current like '%9.98' or  beam_current like '%9.99'  or beam_current like '%0' or beam_current like '%_0.01' or beam_current like '%_0.02' or beam_current like '%_0.03' or beam_current like '%_0.04' or beam_current like '%_0.05' or beam_current like '%_0.06')";

          System.out.println("Value of sql of FindClosestToMultiplesOfTen is"+sql);
          stmt.executeQuery(sql);
          rs = stmt.getResultSet();

         rs.last();
            int row_cnt=rs.getRow();
            System.out.println("row_count of closest " +row_cnt);
             vals = new double[row_cnt];
            rs.beforeFirst();
while(rs.next()) 
    {
   for(int j=0; j<1; j++)
         {
           vals[i]  = rs.getDouble(1);
         }
        i++;
     }
    }
 catch( Exception e )
    {
        System.out.println("\nException "+e);
    }
   //  get the max value, and its multiple of ten to get the number of buckets
     double max = java.lang.Double.MIN_VALUE;

     for (double v : vals) 
        {
        System.out.println("value of v after double v : vals"+v);
        max = Math.max(max, v);
        }
     Arrays.sort(vals);
     System.out.println("Min value in array in c "+vals[0]);
     double min=vals[0];
     int m2=(int) Math.round(min);
     int m3=(int) Math.round(max);

     int bucketCount = 1+((m3-m2)/10);
     double[] bucket =new double[bucketCount];

     //  initialise the buckets array to store the closest values
    double[][] buckets = new double[bucketCount][3];
    for (int i1 = 0; i1 < bucketCount; i1++){
         // store the current smallest delta in the first element
         buckets[i1][0] = java.lang.Double.MAX_VALUE; 
         // store the current "closest" index in the second element
         buckets[i1][1] = -1d;
         // store the current "closest" value in the third element
         buckets[i1][2] = java.lang.Double.MAX_VALUE;
     }


     //  iterate the rows
     for (row_id=0 ; row_id < vals.length; row_id++) // row_id=137
     {
         //  get the value from the row
         double v = vals[row_id];

         //  get the closest multiple of ten to v
         double mult = getMultipleOfTen(v); // e.g. 50, 60, etc

         //  get the absolute distance of v from the multiple of ten
         double delta = Math.abs(mult - v); // 50 - 49.9 = 0.1
         //  get the bucket index based on the value of `mult`
        bIdx = (int)(mult / 10d) - m2/10;//50/10=5

      if (buckets[bIdx][0] > delta) // max>0.1
         {

           buckets[bIdx][0] = delta;//.01(50-49.95)
           buckets[bIdx][1] = row_id;
            buckets[bIdx][2] = v;


            System.out.println("beam_current: "+buckets[bIdx][2]);
            //z++;

         }
      } 

     System.out.format("    10x row value%n");
    for (int i1 =0; i1 < buckets.length; i1++)
    {
          bucket = buckets[i1];
         rowIndex = (int) bucket[1];
          int row_no=rowIndex+1;
          double rowValue = bucket[2];
          System.out.println("row index "+row_no+ "value is "+rowValue);
          DecimalFormat twoDForm = new DecimalFormat("#.##"); 



          rs.absolute(rowIndex+1);
       map1.put(java.lang.Double.valueOf(twoDForm.format(rs.getDouble(1))),"");

         }

    return map1;
    }

En ambos métodos FindClosestToMultiplesOfTen () y ClosestToMultiplesOfTen_User (), solo hay una diferencia en el tamaño del conjunto de resultados ya que el tiempo de registro de ambos es diferente. Ahora quiero que el tamaño del conjunto de resultados ClosestToMultiplesOfTen_User () sea igual al tamaño del conjunto de resultados de FindClosestToMultiplesOfTen, siempre que no haya un valor correspondiente en el resultado de ClosestToMultiplesOfTen_User que se obtiene después del procesamiento.

código para ClosestToMultiplesOfTen_User is-

public  LinkedHashMap<Double, String> ClosestToMultiplesOfTen_User(String start,String end) throws SQLException {

int row_id ;
int bIdx = 0;
double[] vals=null;
int rowIndex = 0 ;
int i=0;

try
        { 
          con = getConnection();
          stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);

          String sql="select distinct beam_current from INDUS2_BDS.dbo.DCCT where logtime between '"+start+"' and '"+end+"'"+
                  "and (beam_current like '%9.95' or beam_current like '%9.96' or beam_current like '%9.97' or beam_current like '%9.98' or  beam_current like '%9.99'  or beam_current like '%0' or beam_current like '%_0.01' or beam_current like '%_0.02' or beam_current like '%_0.03' or beam_current like '%_0.04' or beam_current like '%_0.05' or beam_current like '%_0.06') ";

          System.out.println("Value of sql of FindClosestToMultiplesOfTen is"+sql);
          stmt.executeQuery(sql);
          rs = stmt.getResultSet();

         rs.last();
            int row_cnt=rs.getRow();
            System.out.println("row_count of closest " +row_cnt);
             vals = new double[row_cnt];
            rs.beforeFirst();
while(rs.next()) 
    {
   for(int j=0; j<1; j++)
         {
           vals[i]  = rs.getDouble(1);
         }
        i++;
     }
    }
 catch( Exception e )
    {
        System.out.println("\nException "+e);
    }
 //  get the max value, and its multiple of ten to get the number of buckets
 double max = java.lang.Double.MIN_VALUE;
 for (double v : vals) max = Math.max(max, v);
Arrays.sort(vals);
System.out.println("value at vals[0] c "+vals[0]);
double min=vals[0];
int m2=(int) Math.round(min);
int m3=(int) Math.round(max);


int bucketCount = 1+((m3-m2)/10);
double[] bucket =new double[bucketCount];



 System.out.println("bucketcount in closest "+bucketCount);

 //  initialise the buckets array to store the closest values
double[][] buckets = new double[bucketCount][3];
for (int i1 = 0; i1 < bucketCount; i1++){
     // store the current smallest delta in the first element
     buckets[i1][0] = java.lang.Double.MAX_VALUE;
     // store the current "closest" index in the second element
     buckets[i1][1] = -1d;
     // store the current "closest" value in the third element
     buckets[i1][2] = java.lang.Double.MAX_VALUE;
 }

 //  iterate the rows
 for (row_id=0 ; row_id < vals.length; row_id++)
 {
     //  get the value from the row
     double v = vals[row_id];
     System.out.println("value at "+row_id+": "+v);
     //  get the closest multiple of ten to v
     double mult = getMultipleOfTen(v);
     //  get the absolute distance of v from the multiple of ten
     double delta = Math.abs(mult - v);
     //  get the bucket index based on the value of `mult`
     bIdx = (int)(mult / 10d) - m2/10;


    if (buckets[bIdx][0]  > delta)
     {
      //  this is closer than the last known "smallest delta"
       buckets[bIdx][0] = delta;
       buckets[bIdx][1] = row_id;
       buckets[bIdx][2] = v;

       System.out.println("beam_current closeset: "+buckets[bIdx][2]);

     }
  }  
//   print out the result
for (int i1 =0; i1 < buckets.length; i1++)
{
      bucket = buckets[i1];
     rowIndex = (int) bucket[1];
 double rowValue = bucket[2];
      //System.out.println("row index "+row_no+ "value is "+rowValue);
      DecimalFormat twoDForm = new DecimalFormat("#.##"); 
      System.out.println("row index closeset "+rowIndex+ "value is closest "+rowValue);
   //System.out.println("value of rowIndex+1 is"+row_no);
      rs.absolute(rowIndex+1);
      user_current_map.put(java.lang.Double.valueOf(twoDForm.format(rs.getDouble(1))),"");
     // map1.put(rs.getString(2),(rs.getString(1)));
      //l.add(map1);
     }
System.out.println("user_current_map "+user_current_map);

return user_current_map;
}

el código para refarray_vac1 () es

public  List<Vacc1_Decline> refarray_vac1(String fdate,String ldate) throws SQLException, ParseException {

        st_jsp.clear();
    //System.out.println("date from jsp is : "+date);
     List<Double> slist_user = new ArrayList<Double>(user_current_map.keySet());
      String s_user = StringUtils.join(slist_user, ',');
System.out.println("comma separated string by user_selection" +s_user);
    //  int i=0;
       try
            {  
              con = getConnection();
              stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);



                     String vs1= " sql query";

        //      System.out.println("value from user_selection is " +vs1);
              stmt.executeQuery(vs1);
               rs = stmt.getResultSet();

               while (rs.next()) {
                   Vacc1_Decline ref = new Vacc1_Decline();

                      ref.setLogtime(rs.getString(1));

                         ref.setBeam_current(rs.getString(2));

                          ref.setBeam_energy(rs.getString(3));

                      ref.setSt1_vs1_bag1_rb(rs.getString(4));

                      ref.setSt1_vs1_bag2_rb(rs.getString(5));

                  st_jsp.add(ref);

                }

            }
       catch( Exception e )
                {
                    System.out.println("\nException in refarray_vac1 "+e);
                }


       return st_jsp;
      }

Respuestas a la pregunta(0)

Su respuesta a la pregunta