我查了几篇关于比较器的帖子,但我坚持了一点。
我正在使用的比较器:
@Override
public int compare(BaseFolder arg0, BaseFolder arg1) {
try {
Object value1 = arg0.getName();
Object value2 = arg1.getName();
Collator lithuanianCollator = Collator.getInstance(new Locale("lt_LT"));
lithuanianCollator.setStrength(Collator.PRIMARY);
int value = lithuanianCollator.compare(value1.toString(), value2.toString());
return SortOrder.ASCENDING.equals(sortOrder) ? value : -1 * value;
}
catch(Exception e) {
throw new RuntimeException();
}
}
它确实排序,但它在立陶宛字母上不能正常工作,我不明白为什么。
编辑:由于某种原因,排序似乎取决于字符串长度。
例如。
编辑:
public class BaseFolder {
private String id;
private String name;
private String description;
private String lastModifiedBy;
private String lastModificationDate;
private String createdBy;
private String creationDate;
private String parentId;
public BaseFolder() {
}
public BaseFolder(CmisObject obj) {
this.id = obj.getId();
this.name = obj.getName();
this.description = obj.getDescription();
this.lastModificationDate = DateFormatUtils.format(obj.getLastModificationDate().getTime(), "yyyy-MM-dd");
this.lastModifiedBy = obj.getLastModifiedBy();
this.createdBy = obj.getCreatedBy();
this.creationDate = DateFormatUtils.format(obj.getCreationDate().getTime(), "yyyy-MM-dd");
}
public BaseFolder(String id, String name, String description, String parentId) {
super();
this.id = id;
this.name = name;
this.description = description;
this.parentId = parentId;
}
public Map<String, Object> getProperties() {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(PropertyIds.PARENT_ID, "cmis:parentId");
properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");
properties.put(PropertyIds.NAME, getName());
properties.put(PropertyIds.DESCRIPTION, getDescription());
return properties;
}
使用java 8,Primefaces,JSF
答案 0 :(得分:2)
我试过这个代码来订购
public static void main(String[] args) {
String[] words = {"ą", "a", "į", "i", "ąąąąą", "aaaaa"};
Collator en_USCollator = Collator.getInstance(new Locale("en","US"));
Collator lt_LTCollator = Collator.getInstance(new Locale("lt","LT"));
sortStrings(en_USCollator, words);
System.out.println(Arrays.toString(words));
sortStrings(lt_LTCollator, words);
System.out.println(Arrays.toString(words));
}
public static void sortStrings(Collator collator, String[] words) {
String tmp;
for (int i = 0; i < words.length; i++) {
for (int j = i + 1; j < words.length; j++) {
if (collator.compare(words[i], words[j]) > 0) {
tmp = words[i];
words[i] = words[j];
words[j] = tmp;
}
}
}
}
这是输出
[a, ą, aaaaa, ąąąąą, i, į]
[a, ą, aaaaa, ąąąąą, i, į]
<强>更新强>
您可以使用RuleBasedCollator
String simple = "< a< ą< i< į";
RuleBasedCollator lt_LTCollator = new RuleBasedCollator(simple);
这是输出
[a, aaaaa, ą, ąąąąą, i, į]
这里有更多信息 http://docs.oracle.com/javase/7/docs/api/java/text/RuleBasedCollator.html