我有一种方法,通过该方法,我可以按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等。
要以相反的顺序表示它,请在您的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];**