汉字中文拼音排序
工具类
import java.text.Collator;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.function.Function;
/**
* @author Alone
*/
public class ChineseSortUtil {
private static final Comparator<Object> CHINESE_COMPARATOR = Collator.getInstance(Locale.CHINA);
public static <T> Comparator<T> wrapComparator(Function<? super T, String> keyExtractor) {
return Comparator.comparing(keyExtractor, CHINESE_COMPARATOR);
}
public static void sort(List<String> data) {
data.sort(wrapComparator(Function.identity()));
}
public static <T> void sort(List<T> data, Function<? super T, String> keyExtractor) {
data.sort(wrapComparator(keyExtractor));
}
}
用法
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Alone
*/
public class Test {
public static void main(String[] args) {
// 字符串集合
String[] data = {"上海", "安徽", "浙江"};
List<String> list = Arrays.asList(data);
System.out.println("字符串集合排序前:" + list);
ChineseSortUtil.sort(list);
System.out.println("字符串集合排序后:" + list);
System.out.println("--------------------------------");
@Data
@AllArgsConstructor
class Item {
private String name;
private int id;
}
// 对象集合
Item[] data2 = {new Item("上海", 1), new Item("安徽", 2), new Item("浙江", 3)};
List<Item> list2 = Arrays.asList(data2);
System.out.println("对象集合排序前:" + list2);
ChineseSortUtil.sort(list2, Item::getName);
System.out.println("对象集合排序后1:" + list2);
// 也可以在stream中使用
List<Item> list3 = list2.stream()
// 一些业务处理
.filter(item -> true)
.sorted(ChineseSortUtil.wrapComparator(Item::getName))
.collect(Collectors.toList());
System.out.println("对象集合排序后2:" + list3);
}
}