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

心已赠人 2022-12-25 02:00 347阅读 0赞

format_png

format_png 1

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

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

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

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

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

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

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

format_png 2

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

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

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

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

让程序跑一跑看看:

format_png 3

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

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

结果如下:

format_png 4

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

往期精彩

凌云KTV点歌系统功能简介

2020-10-17

format_png 5

注意!在subList生成子列表之后,一定不要随便更改原列表

2020-10-15

format_png 6

神奇!一行代码实现删除某集合下标20-30的元素

2020-10-14

format_png 7

‘小会计’的转行之旅

2020-10-13

format_png 8

子列表只是原列表的一个视图

2020-10-12

format_png 9

“半路出家”的程序猿怎么不被“熊”

2020-10-11

format_png 10

某同学工作之后的感悟

2020-10-10

format_png 11

format_png 12

format_png 13

点分享

format_png 14

点点赞

format_png 15

点在看

发表评论

表情:
评论列表 (有 0 条评论,347人围观)

还没有评论,来说两句吧...

相关阅读