Буквенно-цифровая колонка неправильно сортируется - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь отсортировать список номеров счетов, которые содержат как буквы, так и цифры.При сортировке в порядке убывания я ожидаю, что Счет № 192685 будет предшествовать Счет № 19s100619916001, однако получаю обратное.Как бы я получить их в правильном порядке?Мой код для этого ниже:

public static void assertSortedAlphaNumerics(Grid grid, String header, boolean isAscending) {
    List<String> original = grid.getColumn(header);
    List<String> originalFormatted = new ArrayList<String>();

    Collections.replaceAll(original, null, "");

    // convert list to lowercase
    original = original.stream().map(String::toLowerCase).collect(Collectors.toList());

    for (int i = 0; i < original.size(); i++) {
        String originalWithoutCharacters = original.get(i).replaceAll(("[^A-Za-z0-9 ]"), "");
        originalFormatted.add(originalWithoutCharacters);
    }

    ArrayList<String> sorted = new ArrayList<String>(originalFormatted);

    if (isAscending) {
        Collections.sort(sorted); // sort ascending
    } else {
        Collections.sort(sorted, Collections.reverseOrder()); // sort descending
    }

    assertEquals("Alphanumeric column is not sorted: " + 
                    header + " expected: \n" +
                    sorted + "\nbut got:\n" + 
                    originalFormatted,
                sorted, 
                originalFormatted);
}

Я включил ожидаемый и фактический результат ниже.Это большой список, но это только 192685, что неуместно.Пожалуйста, см. Пример ниже:

Ожидаемый результат: 1604, 1606, 1609, 1610, 1702, 1733747, 1854, 18687, 18691, 18709, 18710, 18713, 18720, 192685, 19s100619916001, 19s100620272001, 20083461,]

Фактический результат: [1604, 1606, 1609, 1610, 1702, 1733747, 1854, 18687, 18691, 18709, 18710, 18713, 18720, 19s100619916001, 19s100620272001, 192685, 20083461]

шаг, который я выполняю:

public void the_table_can_be_sorted(String table) throws Exception {
    switch (table) {
    case "Invoices Awaiting Approval":
        sortInvoicesAwaitingApproval();
        break;

    case "All Jobs":
        sortAllJobs();
        break;

    default:
        throw new Exception("Cannot find table on page");
    }
}

, который приводит к:

private void sortInvoicesAwaitingApproval() throws ParseException {
    Grid grid;
    String[] headersInvoicesAwaitingApproval = {"Invoice Ref", "Invoice Date", "Order Ref", "Budget", "Supplier", "Site", "Net ($)", "Tax ($)", "Gross ($)"};
    for (String header : headersInvoicesAwaitingApproval) {
        runtimeState.invoicesAwaitingApprovalPage.tableSort(header, RandomUtils.nextBoolean());
        outputHelper.takeScreenshot();

        grid = runtimeState.invoicesAwaitingApprovalPage.getGrid();

        boolean isAscending = runtimeState.invoicesAwaitingApprovalPage.isAscending(header);
        String order = isAscending ? "ascending" : "descending";
        runtimeState.scenario.write("Asserting " + header + " column is sorted in " + order + " order");

        switch (header){
        case "Invoice Date":
            GridHelper.assertSortedDates(grid, header, "M/d/yyyy", isAscending);
            break;

        case "Net ($)":
        case "Tax ($)":
        case "Gross ($)":
            GridHelper.assertSortedNumerics(grid, header, isAscending);
            break;

        default:
            GridHelper.assertSortedAlphaNumerics(grid, header, isAscending);
        }
    }
}

1 Ответ

0 голосов
/ 17 декабря 2018

Кажется, что простой Collections.sort(list) дает вам предпочтительный вывод.

    List<String> input = Arrays.asList("1604", "1606", "1609", "1610", "1702", "1733747", "1854", "18687", "18691", "18709", "18710", "18713", "18720", "192685", "19s100619916001", "19s100620272001", "20083461");
    Collections.shuffle(input);
    List<String> output = new ArrayList<>(input);
    Collections.sort(output);
    List<String> outputReversed = new ArrayList<>(output);
    Collections.sort(outputReversed, Collections.reverseOrder());

Доказательство: -

И обратный порядок работает также: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...