我从基于 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; 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.
我需要在 Karate 功能文件中使用升序/降序排序。有人可以帮我吗?
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
和 Double
相同List
。当排序方法尝试比较Integer
时到 Double
它尝试转换 Integer
到 Double
,失败了。
不要使用原始类型。如果需要将 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()
将它们相互比较不会有困难。
关于java - Collections.sort 方法抛出类 java.lang.Integer 无法转换为类 java.lang.Double 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65788369/