package Util;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.sourceforge.pinyin4j.PinyinHelper;
import Bean.MovieInfo;
public class SortMovie implements Comparator<Object>{
public int compare(Object o1,Object o2) {
MovieInfo l1 = (MovieInfo) o1;
MovieInfo l2 = (MovieInfo) o2;
String name1 = l1.getMovieName().toString();;
String name2 = l2.getMovieName().toString();;
for (int i = 0; i < name1.length() && i < name2.length(); i++) {
int codePoint1 = name1.charAt(i);
int codePoint2 = name2.charAt(i);
if (Character.isSupplementaryCodePoint(codePoint1)
|| Character.isSupplementaryCodePoint(codePoint2)) {
i++;
}
if (codePoint1 != codePoint2) {
if (Character.isSupplementaryCodePoint(codePoint1)
|| Character.isSupplementaryCodePoint(codePoint2)) {
return codePoint1 - codePoint2;
}
String pinyin1 = pinyin((char) codePoint1);
String pinyin2 = pinyin((char) codePoint2);
if (pinyin1 != null && pinyin2 != null) { // 两个字符都是汉字
if (!pinyin1.equals(pinyin2)) {
return pinyin1.compareTo(pinyin2);
}
} else {
return codePoint1 - codePoint2;
}
}
}
return name1.length() - name2.length();
}
/**
* 字符的拼音,多音字就得到第一个拼音。不是汉字,就return null。
*/
private String pinyin(char c) {
String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c);
if (pinyins == null) {
return null;
}
return pinyins[0];
}
public static void testNew(){
List<MovieInfo> chinesesOrderList = new ArrayList< MovieInfo>();
MovieInfo a = new MovieInfo();
MovieInfo a1 = new MovieInfo();
MovieInfo a2 = new MovieInfo();
MovieInfo a3 = new MovieInfo();
MovieInfo a4 = new MovieInfo();
MovieInfo a5 = new MovieInfo();
MovieInfo a6 = new MovieInfo();
MovieInfo a7 = new MovieInfo();
MovieInfo a8 = new MovieInfo();
MovieInfo a9 = new MovieInfo();
MovieInfo a0 = new MovieInfo();
a.setMovieName("致命");
a0.setMovieName("哈哈");
a1.setMovieName("好看 ");
a2.setMovieName("座头市");
a3.setMovieName("倩女幽魂");
a4.setMovieName("喋血双雄");
a5.setMovieName("飓风");
a6.setMovieName("艋舺");
a7.setMovieName("测试部门");
a8.setMovieName("楢山节考");
a9.setMovieName("蝙蝠侠:黑暗");
chinesesOrderList.add(a);
chinesesOrderList.add(a0);
chinesesOrderList.add(a1);
chinesesOrderList.add(a2);
chinesesOrderList.add(a3);
chinesesOrderList.add(a4);
chinesesOrderList.add(a5);
chinesesOrderList.add(a6);
chinesesOrderList.add(a7);
chinesesOrderList.add(a8);
chinesesOrderList.add(a9);
Collections.sort(chinesesOrderList,new SortMovie());
System.out.println("中文排序: = ");
for (int i = 0; i < chinesesOrderList.size(); i++) {
MovieInfo chinese = chinesesOrderList.get(i);
System.out.println("" + chinese.getMovieName());
}
}
public static void main(String[] args) {
testNew();
}
}
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.sourceforge.pinyin4j.PinyinHelper;
import Bean.MovieInfo;
public class SortMovie implements Comparator<Object>{
public int compare(Object o1,Object o2) {
MovieInfo l1 = (MovieInfo) o1;
MovieInfo l2 = (MovieInfo) o2;
String name1 = l1.getMovieName().toString();;
String name2 = l2.getMovieName().toString();;
for (int i = 0; i < name1.length() && i < name2.length(); i++) {
int codePoint1 = name1.charAt(i);
int codePoint2 = name2.charAt(i);
if (Character.isSupplementaryCodePoint(codePoint1)
|| Character.isSupplementaryCodePoint(codePoint2)) {
i++;
}
if (codePoint1 != codePoint2) {
if (Character.isSupplementaryCodePoint(codePoint1)
|| Character.isSupplementaryCodePoint(codePoint2)) {
return codePoint1 - codePoint2;
}
String pinyin1 = pinyin((char) codePoint1);
String pinyin2 = pinyin((char) codePoint2);
if (pinyin1 != null && pinyin2 != null) { // 两个字符都是汉字
if (!pinyin1.equals(pinyin2)) {
return pinyin1.compareTo(pinyin2);
}
} else {
return codePoint1 - codePoint2;
}
}
}
return name1.length() - name2.length();
}
/**
* 字符的拼音,多音字就得到第一个拼音。不是汉字,就return null。
*/
private String pinyin(char c) {
String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c);
if (pinyins == null) {
return null;
}
return pinyins[0];
}
public static void testNew(){
List<MovieInfo> chinesesOrderList = new ArrayList< MovieInfo>();
MovieInfo a = new MovieInfo();
MovieInfo a1 = new MovieInfo();
MovieInfo a2 = new MovieInfo();
MovieInfo a3 = new MovieInfo();
MovieInfo a4 = new MovieInfo();
MovieInfo a5 = new MovieInfo();
MovieInfo a6 = new MovieInfo();
MovieInfo a7 = new MovieInfo();
MovieInfo a8 = new MovieInfo();
MovieInfo a9 = new MovieInfo();
MovieInfo a0 = new MovieInfo();
a.setMovieName("致命");
a0.setMovieName("哈哈");
a1.setMovieName("好看 ");
a2.setMovieName("座头市");
a3.setMovieName("倩女幽魂");
a4.setMovieName("喋血双雄");
a5.setMovieName("飓风");
a6.setMovieName("艋舺");
a7.setMovieName("测试部门");
a8.setMovieName("楢山节考");
a9.setMovieName("蝙蝠侠:黑暗");
chinesesOrderList.add(a);
chinesesOrderList.add(a0);
chinesesOrderList.add(a1);
chinesesOrderList.add(a2);
chinesesOrderList.add(a3);
chinesesOrderList.add(a4);
chinesesOrderList.add(a5);
chinesesOrderList.add(a6);
chinesesOrderList.add(a7);
chinesesOrderList.add(a8);
chinesesOrderList.add(a9);
Collections.sort(chinesesOrderList,new SortMovie());
System.out.println("中文排序: = ");
for (int i = 0; i < chinesesOrderList.size(); i++) {
MovieInfo chinese = chinesesOrderList.get(i);
System.out.println("" + chinese.getMovieName());
}
}
public static void main(String[] args) {
testNew();
}
}