Неправильная сортировка с коллекцией в java, если в списке юникод

avatar
Sobhit Sharma
9 августа 2021 в 06:36
62
0
0

Я пытаюсь отсортировать список с различными данными в списке, такими как юникод в данных или также английские имена, но не могу отсортировать, потому что коллекция не может понять значение как юникод.

Вот код

public void sortingAscending(int indexColumn, String sortType) {
        new WebDriverWait(driver, 5)
            .until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(progressBar)));

        ArrayList<String> obtainedList = new ArrayList<>();

        WebElement element = null;
        for (int index = 1; index <= 10; index++) {
            element = driver.findElement(By.xpath("//tbody/tr[" + index + "]/td[" + indexColumn + "]"));
            obtainedList.add(element.getText());
            log.info("Adding first row element to array list " + element.getText());
        }
            ArrayList<String> sortedList = new ArrayList<>();
            for (String s : obtainedList) {
                sortedList.add(s);
                log.info("Sorting list " + s);
            }
                switch (sortType) {
                    case "Ascending":
                        Collections.sort(sortedList);
                        log.info("Ascending order " + sortedList);
                        break;
                    case "Descending":
                        Collections.sort(obtainedList,Collections.reverseOrder());
                        log.info("Descending order " + sortedList);
                        Assert.assertEquals(obtainedList, sortedList);
                        break;
                    default:
                        log.info("Default sort");
                }
    }

Вот данные журнала, которыми я могу поделиться с вами для дальнейшего понимания.

INFO [main] (CF.java:489)- Adding first row element to array list 地区地区地区地区
 INFO [main] (CF.java:489)- Adding first row element to array list 地区
 INFO [main] (CF.java:489)- Adding first row element to array list Zentry, LLC
 INFO [main] (CF.java:489)- Adding first row element to array list wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
 INFO [main] (CF.java:489)- Adding first row element to array list wqeew
 INFO [main] (CF.java:489)- Adding first row element to array list WOOLWICH HISTORICAL SOCIETY INC
 INFO [main] (CF.java:489)- Adding first row element to array list Wendy's Hot pizza
 INFO [main] (CF.java:489)- Adding first row element to array list Vonage地区
 INFO [main] (CF.java:489)- Adding first row element to array list Vivid Seats
 INFO [main] (CF.java:489)- Adding first row element to array list Vivid Seats
 INFO [main] (CF.java:494)- Sorting list 地区地区地区地区
 INFO [main] (CF.java:494)- Sorting list 地区
 INFO [main] (CF.java:494)- Sorting list Zentry, LLC
 INFO [main] (CF.java:494)- Sorting list wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
 INFO [main] (CF.java:494)- Sorting list wqeew
 INFO [main] (CF.java:494)- Sorting list WOOLWICH HISTORICAL SOCIETY INC
 INFO [main] (CF.java:494)- Sorting list Wendy's Hot pizza
 INFO [main] (CF.java:494)- Sorting list Vonage地区
 INFO [main] (CF.java:494)- Sorting list Vivid Seats
 INFO [main] (CF.java:494)- Sorting list Vivid Seats
 INFO [main] (CF.java:503)- Descending order [地区地区地区地区, 地区, Zentry, LLC, wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww, wqeew, WOOLWICH HISTORICAL SOCIETY INC, Wendy's Hot pizza, Vonage地区, Vivid Seats, Vivid Seats]
 INFO [main] (Hooks.java:116)- Jarvis Closed

java.lang.AssertionError: Lists differ at element [2]: Zentry, LLC != wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww expected [Zentry, LLC] but found [wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww]
Источник
Thorbjørn Ravn Andersen
9 августа 2021 в 06:49
0

Какая у вас локаль при сортировке?

Sobhit Sharma
9 августа 2021 в 06:51
0

У меня разные локали. Не ограничивается одним видом.

Thorbjørn Ravn Andersen
9 августа 2021 в 06:53
0

Порядок сортировки зависит от локали.

Sobhit Sharma
9 августа 2021 в 06:54
0

Есть ли способ справиться с другой локалью?

Joachim Sauer
9 августа 2021 в 06:54
1

Я не понимаю код: вы получаете список данных откуда-то (WebDriver), сортируете его копию, а затем проверяете, что они оба одинаковы. Почему? Какова цель?

Joachim Sauer
9 августа 2021 в 06:55
0

Вы можете использовать Collator.getInstance(Locale), чтобы получить Collator для определенной локали. Collator — это Comparator.

Sobhit Sharma
9 августа 2021 в 07:06
0

Цель: я пытаюсь проверить, работает ли сортировка на портале или нет. Я нажимаю, чтобы начать сортировку, читаю значение из списка веб-элементов, затем использую те же значения для самостоятельной сортировки, а затем проверяю оба, чтобы убедиться, что сортировка работает.

Sobhit Sharma
9 августа 2021 в 07:06
0

можете показать пример?

Thorbjørn Ravn Andersen
9 августа 2021 в 07:27
0

Да, есть. Вы можете изучить раздел интернационализации учебника по Oracle Java по адресу docs.oracle.com/javase/tutorial/i18n/index.html, чтобы лучше понять Locales.

Holger
11 августа 2021 в 15:39
2

Почему вы называете Collections.sort(sortedList); по возрастанию, а Collections.sort(obtainedList,Collections.reverseOrder()); по убыванию? Конечно, последний вообще не изменяет sortedList, когда вы передаете ему obtainedList. Кроме того, чтобы сделать копию списка, просто используйте ArrayList<String> sortedList = new ArrayList<>(obtainedList);. И если вы хотите иметь порядок без учета регистра, вы должны сказать это явно. Используйте sortedList.sort(String.CASE_INSENSITIVE_ORDER); для возрастания и sortedList.sort(String.CASE_INSENSITIVE_ORDER.reversed()); для убывания.

Ответы (0)