话不多说看代码
package com.*;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
//测试类
public class Demo {
@Test
public void test_sort_pinyin() {
List<User> userList = new ArrayList<>();
userList.add(new User("博爱大",22));
userList.add(new User("华三",22));
userList.add(new User("是你吗",22));
userList.add(new User("不对",22));
userList.add(new User("疫情",22));
userList.add(new User("1哈哈",22));
userList.add(new User("张三",22));
userList.add(new User("李四",22));
userList.add(new User("王五",22));
userList.add(new User("赵六",22));
userList.add(new User("JAVA",22));
userList.add(new User("$%$",22));
userList.add(new User("123",22));
userList.add(new User("1哈哈A",22));
userList.add(new User("1哈哈b",22));
Collections.sort(userList, new PinyinComparator());
System.out.println(userList.toString());
}
}
package com.*;
import java.io.Serializable;
//用户对象类
public class User implements Serializable {
private String name;
private Integer age;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
package com.itcast;
import net.sourceforge.pinyin4j.PinyinHelper;
import java.util.Comparator;
//比较器类,需要使用pinyin4j 包
public class PinyinComparator implements Comparator<User> {
public int compare(User o1, User o2) {
char c1 = (o1.getName()).charAt(0);
char c2 = (o2.getName()).charAt(0);
return concatPinyinStringArray(
PinyinHelper.toHanyuPinyinStringArray(c1)).compareTo(
concatPinyinStringArray(PinyinHelper
.toHanyuPinyinStringArray(c2)));
}
private String concatPinyinStringArray(String[] pinyinArray) {
StringBuffer pinyinSbf = new StringBuffer();
if ((pinyinArray != null) && (pinyinArray.length > 0)) {
for (int i = 0; i < pinyinArray.length; i++) {
pinyinSbf.append(pinyinArray[i]);
}
}
return pinyinSbf.toString();
}
}