Collections.sort方法正在抛出类java.lang.Integer不能被转换为类java.lang.Double错误
在基于空手道的API自动化中,我从JSON响应中获得了一些运行时值。我将它们存储到ArrayList中,如: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
* 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]