Может ли карта использовать java.text.Collator? - PullRequest
2 голосов
/ 01 августа 2011

Я использую SQL Server 2008 R2.

У меня есть кеш данных, извлеченный из базы данных, и в настоящее время способ получить строку - через map.get(). Однако некоторые части кода напрямую запрашивают из базы данных, а не просто используют кеш, поскольку для этих случаев необходимы некоторые объединения. Проблема в том, что collation в таблице вызывает различное поведение между сравнением текста через сравнение SQL (использует сопоставление таблиц) и сравнением текста через Java с использованием map.get().

Я прочитал о java.text.Collator, но для его правильного использования необходимо использовать collator.Compare. Есть ли способ заставить карту использовать фиксированный Collator.

Кстати, в сопоставлении в этой ситуации используется японский символ, в котором японский язык с полушириной и полной шириной одинаков при сравнении в SQL Server.

Ответы [ 2 ]

4 голосов
/ 01 августа 2011

Вы можете использовать TreeMap с Collator, правильно настроенным для вашего случая.Вот пример, где прописные и строчные латинские символы считаются эквивалентными:

Collator collator = Collator.getInstance(Locale.FRENCH);
collator.setStrength(Collator.PRIMARY);

Map<String, String> map = new TreeMap<String, String>(collator);

map.put("ABC", "foo");

System.out.println(map.get("abc"));
0 голосов
/ 01 августа 2011

Вы можете инициировать Collator с помощью Japanese Locale, например:

Collator collator = Collator.getInstance( Locale.JAPANESE );

И затем вы можете сравнить строки как:

int comparison = collator.compare( strOne, strTwo );
...