小编典典

根据Java中递减顺序的差异,将映射过滤为每10倍的一行

java

我有一种方法,通过该方法,我可以按10的倍数过滤行,即可以按升序过滤最接近十进制数(例如10、20、30等)的行。现在我想按降序进行相同的处理。

请根据以下 异将以下链接过滤器数组 引用为
每十行的倍数之一?**

在上面提到的链接中,相同的过程是以升序完成的,我想以降序执行此操作并将值存储在map中。但是我做不到。

我正在使用以下代码来检索beam_current为十的整数倍的行,

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

    int row_id ;
    int bIdx = 0;
    double[] vals = new double[34];
   // double[] bucket =new double[bucketCount];
    int rowIndex = 0 ;
    int i=0;

    try
            { 
              con = getConnection();
              stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
           //   String sql="select logtime,beam_current from INDUS2_BDS.dbo.DCCT where logtime between '"+name+" 00:00:00' and '"+name+" 23:59:59'"+
            //  "and (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') and beam_energy between '550' and '552'";

              String sql="select logtime,beam_current from INDUS2_BDS.dbo.DCCT where logtime between '2014-10-10 08:50:00' and '2014-10-10 12:50:00'"+
                      "and (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 ClosestToMultiplesOfTen_User is"+sql);
              stmt.executeQuery(sql);
              rs = stmt.getResultSet();
       while(rs.next()) 
        {
           for(int j=0; j<1; j++)
             {
               vals[i]  = rs.getDouble(2);
             }
            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);
    int bucketCount = 1 + (int)(max/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=1 ; row_id < vals.length; row_id++)
    {
        //  get the value from the row
        double v = vals[row_id];
        //  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);
      // System.out.println("value of bidx for bucket index is"+bIdx);
        //    test the last known "smallest delta" for this bucket
        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;

        }
     }  
   //   print out the result
 for (int i1 =1; 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);
         user_current_map.put(java.lang.Double.valueOf(twoDForm.format(rs.getDouble(2))),(rs.getString(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;
}

public static  double getMultipleOfTen(double v)
{
     System.out.println(10d * Math.round(v / 10d));
    return 10d * Math.round(v / 10d);
}

现在我只想颠倒顺序,即现在我要减小beam_current的顺序,即210,22,190等。


阅读 220

收藏
2020-11-26

共1个答案

小编典典

要以相反的顺序表示它,请在您的sql查询中按时间排序,并将存储桶的大小更改为

 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];
double[][] buckets = new double[bucketCount][3];**
2020-11-26