中文拼音排序工具类
代码
import cn.hutool.extra.pinyin.PinyinUtil;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
public class PinyinSortUtil {
public static <T> List<T> sortByPinyin(List<T> list, Function<T, String> extractor) {
return list.stream()
.sorted(Comparator.comparing(extractor, new PinyinComparator()))
.collect(Collectors.toList());
}
public static List<String> sortByPinyin(List<String> list) {
return list.stream()
.sorted(new PinyinComparator())
.collect(Collectors.toList());
}
private static class PinyinComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
String pinyin1 = PinyinUtil.getPinyin(s1);
String pinyin2 = PinyinUtil.getPinyin(s2);
return pinyin1.compareTo(pinyin2);
}
}
}
用到的包
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.7</version>
</dependency>
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
使用方法
List<Person> peoples = Arrays.asList(new Person("张三"), new Person("李四"), new Person("王五"));
List<Person> sortedPeoples = PinyinSortUtil.sortByPinyin(peoples, Person::getName);