集合.sort方法抛出类java.lang.Integer不能转换为类java.lang.Doubl



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

* 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])

当我打印列表时,输出是:

[-150, -210, -100, -112.5]

上面的输出,当我在Collections.sort(al)的帮助下应用排序时,它抛出了以下错误:

class java.lang.Integer cannot be cast to class java. lang.Double (java.lang.Integer and java.lang. Double is in module java.base of loader.

我需要在空手道特征文件中使用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);

您正在将Integers和Doubles添加到同一个List中。当排序方法试图比较IntegerDouble时,它试图将Integer转换为Double,这失败了。

不要使用原始类型。如果需要向List添加双值,请使用List<Double>:

List<Double> al = new ArrayList<>();
al.add(-150.0);
al.add(-210.0);
al.add(-100.0);
al.add(-112.5);
System.out.println(al);
Collections.sort(al);

这样,你的List的所有元素将是相同的类型,Collections.sort()将不会有麻烦比较他们彼此。

猜猜我们刚刚添加了一个karate.sort()API。不幸的是,这不是在0.9.9。因此,如果你可以开始尝试从源代码构建,这将有助于我们确认这是预期的工作。

这里是关于它应该如何工作的文档链接:https://github.com/intuit/karate/tree/develop#json-transforms

* 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 }}]   

与此同时,你可以考虑将所有的排序逻辑移到一个Java util中,你可以从空手道调用它,并将JSON传入/输出——这可能比在Java集合中胡闹更简单。

提供对我有帮助的问题的答案:

方法:

  1. 首先检查在运行时添加的对象是否为Integer类型。

  2. 如果是Integer类型,则将其转换为Double。

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

  4. 执行排序。

    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]
    

希望它能帮助那些试图排序整数和双精度值的人。

最新更新