2011-11-30 13 views
6

Mam kolekcję fasola OptionItemDTO (właściwości etykiety i wartości), a obecnie używam coś takiego, aby posortować według etykiety:Zbieraczka Plus Komparator

Collections.sort(combo, new LabelComparator()) 

Problemem jest to, że nie sort podkreślił samogłoski (moja lokalizacja to język hiszpański).

Zgodnie z tym dokumentem http://blogs.oracle.com/CoreJavaTechTips/entry/sorting_strings Muszę użyć klasy Collator.

Ale jeśli użyję sortowania z kolatorem, nie mogę użyć komparatora (i na odwrót). Jakieś pomysły?

Z góry dzięki!

+1

Od Doc Java: Zbieraczka realizuje komparator tak to już jest komparator. Czy możesz pokazać nam kod, w którym nie działa? http://docs.oracle.com/javase/1.4.2/docs/api/java/text/Collator.html – GETah

Odpowiedz

10

Twój LabelComparator powinien zlecić Collator porównać etykiety swoich DTOs:

public int compare(OptionItemDTO dto1, OptionItemDTO dto2) { 
    return collator.compare(dto1.getLabel(), dto2.getLabel()); 
} 
+0

Działa jak zaklęcie, merci beaucoup –

+0

Należy jednak pamiętać, że JavaDoc programu Collator zaleca użycie CollationKeys do sortowania : http://docs.oracle.com/javase/6/docs/api/java/text/Collator.html – Puce

+0

Ostrzeżenie: powinieneś utworzyć sortownik z odpowiednim ustawieniem narodowym. –

2

Napisałem mały ramy uporządkować zbiory przedmiotów z CollationKeys (zamiast collators):

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

Po prostu trzeba zaimplementować radiolatarni (lub dokonać POJO wdrożyć Lokalizowane), aby zapewnić reprezentację ciąg:

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

Można spojrzeć testów jednostkowych dla niektórych próbek:

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

Biblioteka jest open source.

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

<dependency> 
    <groupId>org.softsmithy.lib</groupId> 
    <artifactId>lib-core</artifactId> 
    <version>0.1</version> 
</dependency>