话不多说,直接上代码
class TestClass {
private String name;
public String getName() {
return name;
}
}
public static final String CHINA = "CJK_UNIFIED_IDEOGRAPHS";
public static final String ENGLISH = "BASIC_LATIN";
public static List<TestClass> FileNameSorting(List<TestClass> b) {
ArrayList<TestClass> english = new ArrayList<>();
ArrayList<TestClass> china = new ArrayList<>();
ArrayList<TestClass> other = new ArrayList<>();
for (int i = 0; i < b.size(); i++) {
String name = b.get(i).getName();
int codePointAt = Character.codePointAt(name, 0);
Character.UnicodeBlock unicodeBlock = Character.UnicodeBlock.of(codePointAt);
String type = unicodeBlock + "";
if (type.equals(ENGLISH)) {
english.add(b.get(i));
} else if (type.equals(CHINA)) {
china.add(b.get(i));
} else {
other.add(b.get(i));
}
}
english.sort((o1, o2) -> {
Collator instance = Collator.getInstance(Locale.ENGLISH);
return Integer.compare(instance.compare(o1.getName(), o2.getName()), 0);
});
china.sort((o1, o2) -> {
Collator instance = Collator.getInstance(Locale.CHINESE);
return Integer.compare(instance.compare(o1.getName(), o2.getName()), 0);
});
other.sort((o1, o2) -> {
Collator instance = Collator.getInstance(Locale.ENGLISH);
return Integer.compare(instance.compare(o1.getName(), o2.getName()), 0);
});
other.addAll(china);
other.addAll(english);
return other;
}
最后显示排序为 特殊符号(除了中英文都是特殊符号) -> 中文 -> 英文