Как считать пространство в конце при сортировке по Java - PullRequest
0 голосов
/ 17 марта 2020

У меня есть список строк.

TagSort-Test-CA-ASSET-ID1_ tag4
 TagSort-Test-CA-ASSET-ID13_tag
 TagSort-Test-CA-ASSET-ID1_ 6th_tag
 TagSort-Test-CA-ASSET-ID1_tag1
 TagSort-Test-CA-ASSET-ID1_tag2
 TagSort-Test-CA-ASSET-ID1_tag5

Когда я делаю

 List<String> test = Arrays.asList(
            "TagSort-Test-CA-ASSET-ID1_ tag4",
            "TagSort-Test-CA-ASSET-ID13_tag",
            "TagSort-Test-CA-ASSET-ID1_ 6th_tag",
            "TagSort-Test-CA-ASSET-ID1_tag1",
            "TagSort-Test-CA-ASSET-ID1_tag2",

            "TagSort-Test-CA-ASSET-ID1_tag5");
        Collections.sort(test);
        System.out.println(test);

, вывод [TagSort-Test-CA-ASSET-ID13_tag, TagSort-Test-CA-ASSET-ID1_ 6th_tag, TagSort-Test-CA-ASSET-ID1_ tag4, TagSort-Test-CA-ASSET-ID1_tag1, TagSort-Test-CA-ASSET-ID1_tag2, TagSort-Test-CA-ASSET-ID1_tag5]

Как я могу получить заказ как [TagSort-Test-CA-ASSET-ID13_tag, TagSort-Test-CA-ASSET-ID1_ 6th_tag, TagSort-Test-CA-ASSET-ID1_tag1, TagSort-Test-CA-ASSET-ID1_tag2,TagSort-Test-CA-ASSET-ID1_ tag4, TagSort-Test-CA-ASSET-ID1_tag5]

Это формат, который я получаю из postgres DB. Мне нужно поддерживать то же поведение в Java.

1 Ответ

1 голос
/ 17 марта 2020

Сортировка Postgress DB, похоже, удаляет пробелы, например, следующий вывод аналогичен ожидаемому выводу:

test.stream()
    .map(s -> s.replace(" ", ""))
    .sorted()
    .forEach(System.out::println);

Но поскольку фактические данные теперь отображаются, вы теряете их, следовательно, сопоставление фактической строки с ключом ввода и удалением пробела, так как значение может работать для вас как:

test.stream()
    .map(s -> new AbstractMap.SimpleEntry<>(s, s.replace(" ", "")))
    .sorted(Map.Entry.comparingByValue())
    .map(AbstractMap.SimpleEntry::getKey)
    .forEach(System.out::println);
...