Java 如何将字符串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.

我有一份航空公司的交易清单,它的票价是

145.19加元、298.17加元、398.17加元、876.21加元、1001.71加元

交易是根据票价从低到高的顺序显示的

我必须创建一个脚本来拉取这个价格,并检查交易是否是基于从低到高的价格出现的。但是我使用数组列表作为字符串,而不是双精度数组

如何将字符串arraylist转换为double,以便arraylist可以返回排序后的值

代码:

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;
}