pinyin4j-2.5.1.jar:支持大多数流行拼音系统的汉字(简体和繁体),包括汉语拼音,同用拼音,Wade-Giles,MPS2,Yale和Gwoyeu Romatzyh。支持多种发音和定制输出。
pinyin4j-2.5.1.jar包,
Maven下载地址
此地址推荐谷歌浏览器下载,本人用搜狗浏览器下载缓慢,谷歌下载速度相对较快。
我的网盘下载地址:我的网盘下载地址
提取码:nq46
idea导入jar包教程
我的代码是先判断年纪,年纪相同判断 名字拼音首字母。else中为判断名字拼音首字母的办法,要比较整个名字,用个for循环,else下面String语句0换成i,可以判断整个名字拼音的顺序
Collections.sort(a1,new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
if (p1.getAge() != p2.getAge()) {
return p1.getAge() - p2.getAge();
} else {
String o1 = p1.getName();
String o2 = p2.getName();
int code1 = o1.charAt(0);
int code2 = o2.charAt(0);
if (code1 != code2) {
if (Character.isSupplementaryCodePoint(code1)
|| Character.isSupplementaryCodePoint(code2)) {
return code1 - code2;
}
String pinyin1 = PinyinHelper.toHanyuPinyinStringArray((char) code1) == null
? null : PinyinHelper.toHanyuPinyinStringArray((char) code1)[0];
String pinyin2 = PinyinHelper.toHanyuPinyinStringArray((char) code2) == null
? null : PinyinHelper.toHanyuPinyinStringArray((char) code2)[0];
if (pinyin1 != null && pinyin2 != null) { // 两个字符都是汉字
if (!pinyin1.equals(pinyin2)) {
return pinyin1.compareTo(pinyin2);
}
} else {
return code1 - code2;
}
}
}
return p1.getAge() - p2.getAge();
}
});
运行截图:
源代码:
package CollectionsDemo;
import net.sourceforge.pinyin4j.PinyinHelper;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class MethodDemo {
public static void main(String[] args) {
ArrayList<Person> a1 = new ArrayList<>();
Person p1 = new Person("欧阳耀莹",31);
Person p2 = new Person("欧阳子遥",21);
Person p3 = new Person("胡歌",35);
Person p4 = new Person("安安",35);
Collections.addAll(a1,p1,p2,p3,p4);
System.out.println(a1);
Collections.sort(a1);
System.out.println(a1);
System.out.println("慕".charAt(0));
System.out.println("胡".charAt(0));
Collections.sort(a1,new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
if (p1.getAge() != p2.getAge()) {
return p1.getAge() - p2.getAge();
} else {
String o1 = p1.getName();
String o2 = p2.getName();
int code1 = o1.charAt(0);
int code2 = o2.charAt(0);
if (code1 != code2) {
if (Character.isSupplementaryCodePoint(code1)
|| Character.isSupplementaryCodePoint(code2)) {
return code1 - code2;
}
String pinyin1 = PinyinHelper.toHanyuPinyinStringArray((char) code1) == null
? null : PinyinHelper.toHanyuPinyinStringArray((char) code1)[0];
String pinyin2 = PinyinHelper.toHanyuPinyinStringArray((char) code2) == null
? null : PinyinHelper.toHanyuPinyinStringArray((char) code2)[0];
if (pinyin1 != null && pinyin2 != null) { // 两个字符都是汉字
if (!pinyin1.equals(pinyin2)) {
return pinyin1.compareTo(pinyin2);
}
} else {
return code1 - code2;
}
}
}
return p1.getAge() - p2.getAge();
}
});
System.out.println(a1);
}
}