Filter ordnet einer Zeile ein Vielfaches von zehn zu, basierend auf dem Unterschied in absteigender Reihenfolge in Java

Ich habe eine Methode, mit der ich Zeilen nach einem Vielfachen von zehn filtern kann, dh ich kann Zeilen filtern, die einem Vielfachen von zehn am nächsten liegen, z. B. 10,20,30 usw., in aufsteigender Reihenfolge. Jetzt möchte ich den gleichen Vorgang in absteigender Reihenfolge ausführen .

Bitte beachten Sie den folgenden Link-Filter-Array auf eine Zeile pro Vielfaches von zehn, basierend auf der Differenz?

In dem oben genannten Link wird derselbe Vorgang in aufsteigender Reihenfolge ausgeführt. Ich möchte dies in absteigender Reihenfolge tun und die Werte in der Karte speichern. Aber das kann ich nicht.

Ich verwende den folgenden Code, um Zeilen abzurufen, in denen beam_current ein Vielfaches von zehn in aufsteigender Reihenfolge ist-

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);
}

Jetzt möchte ich nur die Reihenfolge umkehren, d. H. Jetzt möchte ich die Reihenfolge des Strahlstroms verringern, d. H. 210, 22, 190 usw.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage