Skip to content

Collator类对汉字进行排序

java
import java.text.Collator;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;

public static void main(String[] args) {
    List<String> stringList = Arrays.asList("李四", "阿毛", "老王", "小李", "小董");

    // 使用Collator进行中文排序
    stringList.sort((x, y) -> {
        Collator instance = Collator.getInstance(Locale.CHINA);
        return instance.compare(x, y);
    });

    // 输出排序结果 阿毛 老王 李四 小董 小李
    stringList.forEach(System.out::println);
}

stream流实现数字排序和中文排序

java
public static void main(String[] args) {
    //测试数据,可以看到顺序是乱的。
    List<Student> user = new ArrayList<>();
    user.add( new Student(1, "张三","一年级"));
    user.add( new Student(4, "李四","三年级"));
    user.add( new Student(2, "王五","二年级"));
    user.add( new Student(3, "赵六","四年级"));

    //按编号升序(默认)
    List<Student> collect1 = user.stream().sorted(Comparator.comparingInt(Student::getId)).collect(Collectors.toList());
    //遍历输出
    System.out.println("编号升序");
    collect1.forEach(System.out::println);
    System.out.println("===========================================================================");

    //按年级升序(默认)
    List<Student> collect = user.stream()
        .sorted((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getGrade(),o2.getGrade())).collect(Collectors.toList());
    //遍历输出
    System.out.println("中文升序");
    collect.forEach(System.out::println);
    System.out.println("===========================================================================");

    //按编号降序
    List<Student> collect2 = user.stream().sorted((o1, o2) -> o2.getId() - o1.getId()).collect(Collectors.toList());
    //遍历输出
    System.out.println("编号降序");
    collect2.forEach(System.out::println);
    System.out.println("===========================================================================");

    //按年级降序
    List<Student> collect3 =
        user.stream().sorted((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o2.getGrade(),o1.getGrade())).collect(Collectors.toList());
    //遍历输出
    System.out.println("中文降序");
    collect3.forEach(System.out::println);

}

MIT版权,未经许可禁止任何形式的转载