2011-11-30 27 views
6

Tôi có một bộ sưu tập của đậu OptionItemDTO (các thuộc tính nhãn và giá trị) và Tôi hiện đang sử dụng một cái gì đó như thế này để sắp xếp theo nhãn:collator cộng sánh

Collections.sort(combo, new LabelComparator()) 

Vấn đề là nó không loại nhấn mạnh các nguyên âm (ngôn ngữ của tôi là tiếng Tây Ban Nha).

Theo tài liệu này http://blogs.oracle.com/CoreJavaTechTips/entry/sorting_strings Tôi phải sử dụng một lớp Collator.

Nhưng nếu tôi sử dụng sắp xếp với bộ chia, tôi không thể sử dụng bộ so sánh (và ngược lại). Ý tưởng nào?

Cảm ơn trước!

+1

Từ Java Đốc: collator thực hiện Comparator vì thế nó đã là một so sánh. Bạn có thể hiển thị cho chúng tôi mã không hoạt động không? http://docs.oracle.com/javase/1.4.2/docs/api/java/text/Collator.html – GETah

Trả lời

10

LabelComparator của bạn nên uỷ thác cho một collator để so sánh các nhãn của DTOs của bạn:

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

Làm việc như một sự quyến rũ, merci beaucoup –

+0

Lưu ý rằng JavaDoc của Collator đề xuất sử dụng CollationKeys để phân loại : http://docs.oracle.com/javase/6/docs/api/java/text/Collator.html – Puce

+0

Cảnh báo: bạn nên tạo trình thu thập với ngôn ngữ phù hợp. –

2

Tôi đã viết một khung nhỏ để sắp xếp bộ sưu tập của các đối tượng với CollationKeys (chứ không phải collators):

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

Bạn chỉ cần triển khai Localizer (hoặc làm cho POJO của bạn triển khai Bản địa hóa) để cung cấp biểu diễn chuỗi:

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

Bạn có thể có một cái nhìn tại các unit test cho một số mẫu:

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

Thư viện là mã nguồn mở.

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

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