Java 如何将字符串arraylist转换为double,以便arraylist可以返回排序后的值
我有一份航空公司的交易清单,它的票价是 145.19加元、298.17加元、398.17加元、876.21加元、1001.71加元 交易是根据票价从低到高的顺序显示的 我必须创建一个脚本来拉取这个价格,并检查交易是否是基于从低到高的价格出现的。但是我使用数组列表作为字符串,而不是双精度数组 如何将字符串arraylist转换为double,以便arraylist可以返回排序后的值 代码:Java 如何将字符串arraylist转换为double,以便arraylist可以返回排序后的值,java,selenium,selenium-webdriver,selenium-chromedriver,Java,Selenium,Selenium Webdriver,Selenium Chromedriver,我有一份航空公司的交易清单,它的票价是 145.19加元、298.17加元、398.17加元、876.21加元、1001.71加元 交易是根据票价从低到高的顺序显示的 我必须创建一个脚本来拉取这个价格,并检查交易是否是基于从低到高的价格出现的。但是我使用数组列表作为字符串,而不是双精度数组 如何将字符串arraylist转换为double,以便arraylist可以返回排序后的值 代码: ArrayList dealList=new ArrayList(); List deals=driver.
ArrayList dealList=new ArrayList();
List deals=driver.findelements(By.xpath/“div[@class='xyz']);
//它使用几乎为10的Xpath提取所有费用。
for(Webelement w:deals)
{
add(w.gettext());
}
ArrayList newDeaList=新的ArrayList();
for(字符串s:dealList)
{
newDealList.add(s);
}
Collections.sort(newDealList);
Assert.Assertequals(dealList,newDealList);
但是我没有得到正确的输出
产值:
145.19加元、298.17加元、398.17加元、876.21加元、1001.71加元
例如,将字符串值转换为double就是一个完整的例子。在您的例子中,您希望研究使用-您指定了一个模式,该模式可用于提取这些字符串的“数字”部分 除此之外,比较排序的字符串列表和该列表的未排序的版本显然会导致
错误
——很可能两个列表具有相同的元素,但顺序不同!在任何情况下:您仍然可以进入并简单地手动迭代两个列表,并比较每个条目以确定导致不匹配的条目;然后再仔细看看
最后:请记住,使用double/double表示货币是可能的,但在“真实世界”应用程序中是不可能的。浮点数有舍入误差;因此,您更应该考虑使用。例如,将字符串值转换为double是完全概述的。在您的例子中,您希望研究使用-您指定了一个模式,该模式可用于提取这些字符串的“数字”部分 除此之外,比较排序的字符串列表和该列表的未排序的版本显然会导致
错误
——很可能两个列表具有相同的元素,但顺序不同!在任何情况下:您仍然可以进入并简单地手动迭代两个列表,并比较每个条目以确定导致不匹配的条目;然后再仔细看看
最后:请记住,使用double/double表示货币是可能的,但在“真实世界”应用程序中是不可能的。浮点数有舍入误差;因此,您应该考虑使用。我建议如下:
Collections.sort(stringArray, (s1, s2) -> {
return Double.valueOf(s1.split('$')[1])
.compareTo(Double.valueOf(s2.split('$')[1]));
});
或者,您可以这样做:
Collections.sort(stringArray.stream().map(s -> Double.valueOf(s.split('$')[1])));
尽管如此,您似乎在代码段末尾比较两个不同数组的相等性,在比较地址相等性时,该操作将始终返回false
编辑:(在澄清问题后-下面是如何比较两个数组是否相等)
布尔比较数组(列表arr1、列表arr2){
如果(arr1.size()!=arr2.size()){
返回false;
}
对于(int i=0;i
我建议如下:
Collections.sort(stringArray, (s1, s2) -> {
return Double.valueOf(s1.split('$')[1])
.compareTo(Double.valueOf(s2.split('$')[1]));
});
或者,您可以这样做:
Collections.sort(stringArray.stream().map(s -> Double.valueOf(s.split('$')[1])));
尽管如此,您似乎在代码段末尾比较两个不同数组的相等性,在比较地址相等性时,该操作将始终返回false
编辑:(在澄清问题后-下面是如何比较两个数组是否相等)
布尔比较数组(列表arr1、列表arr2){
如果(arr1.size()!=arr2.size()){
返回false;
}
对于(int i=0;i
专用布尔值ValidateSortedList(){
List stringList=新建ArrayList();
List pageList=新建ArrayList();
集合。添加所有(stringList,“C$145.19”、“C$298.17”、“C$398.17”);
System.out.println(“selenium中的交易列表:+stringList”);
用于(字符串格式:stringList){
int indexOfFare=findIndex(farestring);
Double fareInDouble=Double.parseDouble(fareInString.substring(indexOfFare));
页面列表。添加(fareInDouble);
}
List sortedList=新阵列列表(页面列表);
收集.分类(分类列表);
System.out.println(“网页:“+pageList”);
System.out.println(“selenuim测试列表:“+分类列表”);
布尔等于=分类列表等于(页面列表);
System.out.println(“列表是否相等:”
+sortedList.equals(页面列表));
回报相等;
}
私有int findIndex(字符串str){
对于(int i=0;i
专用布尔值ValidateSortedList(){
List stringList=新建ArrayList();
List pageList=新建ArrayList();
集合。添加所有(stringList,“C$145.19”、“C$298.17”、“C$398.17”);
System.out.println(“selenium中的交易列表:+stringList”);
用于(字符串格式:stringList){
int indexOfFare=findIndex(farestring);
Double fareInDouble=Double.parseDouble(fareInString.substring(indexOfFare));
页面列表。添加(fareInDouble);
}
List sortedList=新阵列列表(页面列表);
收集.分类(分类列表);
System.out.println(“网页:“+pageList”);
System.out.println(“sele
private boolean ValidateSortedList() {
List<String> stringList = new ArrayList<>();
List<Double> pageList = new ArrayList<>();
Collections.addAll(stringList, "C$145.19", "C$298.17", "C$398.17");
System.out.println("deal list in selenium: " + stringList);
for (String fareInString : stringList) {
int indexOfFare = findIndex(fareInString);
Double fareInDouble = Double.parseDouble(fareInString.substring(indexOfFare));
pageList.add(fareInDouble);
}
List<Double> sortedList = new ArrayList<>(pageList);
Collections.sort(sortedList);
System.out.println("web page :" + pageList);
System.out.println("selenuim test list :" + sortedList);
boolean equals = sortedList.equals(pageList);
System.out.println("is list equal :"
+ sortedList.equals(pageList));
return equals;
}
private int findIndex(String str) {
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (Character.isDigit(c)) {
return i;
}
}
return 0;
}