Collator plus Comparator - PullRequest
       3

Collator plus Comparator

6 голосов
/ 30 ноября 2011

У меня есть коллекция bean-компонентов OptionItemDTO (свойства label и value), и в настоящее время я использую что-то вроде этого для сортировки по метке:

Collections.sort(combo, new LabelComparator())

Проблема в том, что она не сортирует ударные гласные (моя локаль испанская).

В соответствии с этим документом http://blogs.oracle.com/CoreJavaTechTips/entry/sorting_strings я должен использовать класс Collator.

Но если я использую сортировку с сортировщиком, я не могу использоватькомпаратор (и наоборот).Есть идеи?

Заранее спасибо!

Ответы [ 2 ]

10 голосов
/ 30 ноября 2011

Ваш LabelComparator должен делегировать Collator для сравнения меток ваших DTO:

public int compare(OptionItemDTO dto1, OptionItemDTO dto2) {
    return collator.compare(dto1.getLabel(), dto2.getLabel());
}
2 голосов
/ 30 ноября 2011

Я написал небольшую структуру для сортировки коллекций объектов с помощью CollationKeys (а не Collators):

http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/text/Localizables.html

Вам просто нужно реализовать Localizer (или заставить ваш POJO реализовать Localizable), чтобы обеспечить строковое представление:

http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/text/Localizer.html

http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/text/Localizable.html

Вы можете взглянуть на модульные тесты для некоторых образцов:

http://softsmithy.hg.sourceforge.net/hgweb/softsmithy/lib/main-golden/file/5c4db802573b/lib-core/src/test/java/org/softsmithy/lib/text/LocalizablesTest.java

Библиотека с открытым исходным кодом.

https://sourceforge.net/projects/softsmithy/files/softsmithy/v0.1/

<dependency>  
    <groupId>org.softsmithy.lib</groupId>  
    <artifactId>lib-core</artifactId>  
    <version>0.1</version>  
</dependency>  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...