Collections.sort方法正在抛出类java.lang.Integer不能被转换为类java.lang.Double错误

Collections.sort方法正在抛出类java.lang.Integer不能被转换为类java.lang.Double错误,java,karate,Java,Karate,在基于空手道的API自动化中,我从JSON响应中获得了一些运行时值。我将它们存储到ArrayList中,如: * def ArrayList = Java.type('java.util.ArrayList') * def Collections = Java.type('java.util.Collections') ArrayList al = new ArrayList(); * eval for(var i = 0; i < actualPrice.length

在基于空手道的API自动化中,我从JSON响应中获得了一些运行时值。我将它们存储到ArrayList中,如:

   * def ArrayList = Java.type('java.util.ArrayList')
   * def Collections = Java.type('java.util.Collections')
  ArrayList al = new ArrayList();
  * eval for(var i = 0; i < actualPrice.length; i++) expectedPrice.add(actualPrice[i])
我需要在空手道特征文件中使用Asc/Desc排序。有人能帮我吗

Java等效代码为:

    ArrayList al = new ArrayList();
    al.add(-150);
    al.add(-210);
    al.add(-100);
    al.add(-112.5);
    System.out.println(al);
    Collections.sort(al);

您正在将
Integer
s和
Double
s添加到同一
列表中。当排序方法尝试将
整数
双精度
进行比较时,它尝试将
整数
转换为
双精度
,但失败

不要使用原始类型。如果需要向
列表添加双值,请使用
列表

List al=new ArrayList();
加上(-150.0);
加上(-210.0);
加上(-100.0);
加上(-112.5);
系统输出打印项次(al);
集合。排序(al);

这样,您的
列表中的所有元素都将是相同的类型,并且
集合.sort()
将不会有麻烦将它们相互比较。

猜猜我们刚才添加了什么
空手道.sort()
API。不幸的是,这不在0.9.9.RC3中,因此如果您可以开始尝试,这将有助于我们确认这是否如预期的那样工作

以下是有关其工作原理的文档链接:


同时,你可以考虑将所有排序逻辑都从java空洞中调用java UTL,然后传递JSON I/OUT,这可能比用Java集合和所有.java/< P> P >更简单,提供了上述问题的答案,这帮助了我:

方法:

  • 首先检查在运行时添加的对象是否为整数类型

  • 如果是整数类型,则将其转换为Double

  • 转换后,将该对象替换为双值

  • 执行排序

    for(Object o :al) {
        if(o instanceof Integer) {
            double o1 = (double)((Integer) o);
            al.set(al.indexOf(o),o1);
        }
    }
    
     Collections.sort(al);
     System.out.println(al );
    
     Collections.sort(al,Collections.reverseOrder());
     System.out.println(al );
    
    输出:

     [-150, -210, -100, -112.5]
     [-210.0, -150.0, -112.5, -100.0]
     [-100.0, -112.5, -150.0, -210.0]
    

  • 希望它能帮助尝试对整数值和双数值进行排序的人。

    这些数值,我正在存储运行时。它也可以有整数、双精度和浮点值。@QualityMatters然后您可以使用
    列表
    ,但这可能不适用于
    集合。sort()
    将等待此功能出现。现在,将逻辑移到java util。@QualityMatters您可以将答案标记为
    已接受
    * def foo = [{a: { b: 3 }}, {a: { b: 1 }}, {a: { b: 2 }}]
    * def fun = function(x){ return x.a.b }
    * def bar = karate.sort(foo, fun)
    * match bar == [{a: { b: 1 }}, {a: { b: 2 }}, {a: { b: 3 }}]   
    
    for(Object o :al) {
        if(o instanceof Integer) {
            double o1 = (double)((Integer) o);
            al.set(al.indexOf(o),o1);
        }
    }
    
     Collections.sort(al);
     System.out.println(al );
    
     Collections.sort(al,Collections.reverseOrder());
     System.out.println(al );
    
     [-150, -210, -100, -112.5]
     [-210.0, -150.0, -112.5, -100.0]
     [-100.0, -112.5, -150.0, -210.0]