Как реализовать компаратор строк, который учитывает символ "-" после буквы "z" - PullRequest
1 голос
/ 07 августа 2020

У меня есть следующий код:

List<String> stringList  = new ArrayList<>();
stringList.add("VasyaPetrov");
stringList.add("Vasya_Petrov");
stringList.add("Vasyapetrov");

List<String> sortedCollection = stringList
        .stream()
        .sorted(String::compareToIgnoreCase)
        .collect((Collectors.toList()));
System.out.println(sortedCollection);

результат

[Vasya_Petrov, VasyaPetrov, Vasyapetrov]

Таким образом, компаратор считает _ символом перед любой буквой алфавита.

Postgres order by считает _ символом после любой буквы алфавита

Это root причина, по которой мой тест не прошел.

Я хочу, чтобы мой тест заработал.

  1. Есть ли способ изменить код символа для конкретного символа в компараторе строк?
  2. Есть ли какие-либо способ изменить код символа для конкретного символа в postgres в порядке?

PS . Я вижу такие методы, как nullsFirst в интерфейсе Comparator. Мне нужно что-то подобное, кроме "_"

1 Ответ

0 голосов
/ 07 августа 2020

В Java вы можете создать свой собственный RuleBasedCollator с символом _ в конце и использовать его в качестве компаратора, например, вот так:

String rules = "< a, A < b, B < c, C < d, D < e, E < f, F < g, G < h, H < i, I" +
        "< j, J < k, K < l, L < m, M < n, N < o, O < p, P < q, Q < r, R" +
        "< s, S < t, T < u, U < v, V < w, W < x, X < y, Y < z, Z < '_'";

RuleBasedCollator ruleBasedCollator = new RuleBasedCollator(rules);

List<String> stringList  = new ArrayList<>();
stringList.add("VasyaPetrov");
stringList.add("Vasya_Petrov");
stringList.add("Vasyapetrov");

List<String> sortedCollection = stringList
        .stream()
        .sorted(ruleBasedCollator::compare)
        .collect((Collectors.toList()));
System.out.println(sortedCollection);

Затем результат будет:

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