java中如何对汉字进行排序?

举报
穆雄雄 发表于 2022/12/12 20:20:58 2022/12/12
【摘要】 前言:上一篇文章我们讲解了java中实现Comparator进行排序 和实现Comparable进行排序,我们分别举例根据学号和姓名降序排序,原文在这里:java中如何对对象排序?  ,不过在文章的最后,我故意留了个问题:“若姓名是汉字,我们上篇文章的方法还可以进行排序吗?”答案是不可以的,今天,我们就这个问题展开阐述!汉字按照首字母的先后顺序排序首先我们在上篇文章的代码基础上,把集合的值(...

前言:上一篇文章我们讲解了java中实现Comparator进行排序 和实现Comparable进行排序,我们分别举例根据学号和姓名降序排序,原文在这里:java中如何对对象排序?  ,不过在文章的最后,我故意留了个问题:“若姓名是汉字,我们上篇文章的方法还可以进行排序吗?”答案是不可以的,今天,我们就这个问题展开阐述!

汉字按照首字母的先后顺序排序

首先我们在上篇文章的代码基础上,把集合的值(name)改成汉字的名称(毕竟学生的姓名哪有叫什么a、b、c的),代码如下:

//对集合进行排序
  public static void testSortList(){
    List<Student> stus = new ArrayList<Student>();
    stus.add(new Student(1,"阿三"));
    stus.add(new Student(4,"布丁"));
    stus.add(new Student(5,"曹操"));
    stus.add(new Student(2,"冯胜"));
    stus.add(new Student(3,"张三"));
    System.out.println("排序之前:");
    for (Student s : stus) {
      System.out.println(s.getSid()+"---"+s.getName());
    }
    //Collections.sort(stus);
    Collections.sort(stus,new SortName());
    System.out.println("排序之后:\n");
    for (Student s : stus) {
      System.out.println(s.getSid()+"---"+s.getName());
    }
  }

按照我们预想的结果,升序的结果应该是:

阿三、布丁、曹操、冯胜、张三

下面我们来跑一下程序看看是不是:

​编辑

居然不可以,看看问题出在哪里?用脚指头都能想得出来,问题就出在了SortName类的compare方法上,该方法的compareTo只适用于字母字符排序(上篇文章的案例就是),compareTo方法的代码:

@Override
  public int compare(Student o,Student o1) {
    
    return o.getName().compareTo(o1.getName());
  }

那我们应该如何改呢?只需要新加个Collator.getInstance(java.util.Locale.CHINA); 即可,全部代码如下:

@Override
  public int compare(Student o,Student o1) {
    Comparator<Object> compare = Collator.getInstance(java.util.Locale.CHINA);
    return compare.compare(o1.getName(),o.getName());
  }

让程序跑一跑看看:

​编辑

那位又问:“老师,这是降序,升序怎么办?”好办,只需将compare里面的参数调换个位置即可,如下:

@Override
  public int compare(Student o,Student o1) {
    Comparator<Object> compare = Collator.getInstance(java.util.Locale.CHINA);
    return compare.compare(o.getName(),o1.getName());
  }

结果如下:

​编辑

好了,今天的分享就到这里,我们明天再见!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。