Я пытаюсь отсортировать список с различными данными в списке, такими как юникод в данных или также английские имена, но не могу отсортировать, потому что коллекция не может понять значение как юникод.
Вот код
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]
Какая у вас локаль при сортировке?
У меня разные локали. Не ограничивается одним видом.
Порядок сортировки зависит от локали.
Есть ли способ справиться с другой локалью?
Я не понимаю код: вы получаете список данных откуда-то (WebDriver), сортируете его копию, а затем проверяете, что они оба одинаковы. Почему? Какова цель?
Вы можете использовать
Collator.getInstance(Locale)
, чтобы получитьCollator
для определенной локали.Collator
— этоComparator
.Цель: я пытаюсь проверить, работает ли сортировка на портале или нет. Я нажимаю, чтобы начать сортировку, читаю значение из списка веб-элементов, затем использую те же значения для самостоятельной сортировки, а затем проверяю оба, чтобы убедиться, что сортировка работает.
можете показать пример?
Да, есть. Вы можете изучить раздел интернационализации учебника по Oracle Java по адресу docs.oracle.com/javase/tutorial/i18n/index.html, чтобы лучше понять Locales.
Почему вы называете
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());
для убывания.