当前位置: 首页 > 面试题库 >

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

闽阳州
2023-03-14
问题内容

我有一种方法,通过该方法,我可以按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];**


 类似资料:
  • 问题内容: 我有一个数组,用于保存结果集中的值。我检索数组的代码的概要是: 获得的样本表是: 在此处输入图片说明 从表中可以明显看出,第二列的beam_current值接近0到220:(0,10,20 … 220)的每个十的整数倍。我想过滤我的数据集,以便对于10的倍数,只选择最接近该倍数的行。为此,我: 从的所有行中减去10,然后找到获得的差值:差最小的行是我感兴趣的唯一行,即10的倍数。T 重

  • 有一张单子 如何过滤列表,通过获得最高的映射组,然后使用Java Stream组合到列表中?结果示例如下: ps:如果在多个地图中有相同的值,请将它们全部保留在列表中。 初始代码:

  • 如何在Spring启动中指定过滤器的顺序?我需要在Spring Security过滤器之后插入我的MDC过滤器。我几乎尝试了一切,但我的过滤器总是第一位的。这不起作用: 这也不管用:

  • 我已经为我的AWS Lambda函数和我的代码库以及捕获帐户ID的注释启用了X射线跟踪。从X射线获取数据的AWX X射线文档提到与X射线跟踪相关的注释已被索引 我正在用帐户ID注释我的跟踪。我希望检索所有具有的跟踪 我已确认我的跟踪具有我所需的注释。我找到了此文档,但我不确定如何从cli应用这些过滤器。 使用aws X射线获取跟踪摘要的跟踪结果片段--开始时间

  • 我想从的中创建一个并在映射中使用相同的parentId映射列表中的所有条目,如。 我使用了但它不编译:

  • 我在我的网络应用程序中偶然发现了一个错误,在我发现发生了什么之前,这个错误让我抓耳挠腮(最终扯了扯头发)。 基本上,我在我的网站上定义了两个过滤器。xml和两个类似的映射: 它们都是Spring MVC过滤器。我的问题是,我得到的表单数据没有被解释为UTF-8,尽管事实上编码过滤器应该在其他任何东西有机会从中读取之前将请求编码设置为UTF-8。 我最后注意到,表单方法过滤器在编码过滤器之前执行,尽