栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

List集合的各种排序总结

Java 更新时间:发布时间: 百科书网 趣学号

在Java编程中,经常要对List集合进行排序,因此对List排序的各种情况进行总结,希望对各位读者有所帮助。

1.单属性变量List排序

          1.1按照变量属性升序,降序排序

  
  1. private void singleVariableSort1(){
  2. List list = Arrays.asList(10,1,6,4,8,7,9,3,2,5);
  3. System.out.println("原始数据:");
  4. list.forEach(n ->{System.out.print(n+", ");});
  5. System.out.println("");
  6. System.out.println("升序排列:");
  7. Collections.sort(list); // 升序排列
  8. list.forEach(n ->{System.out.print(n+", ");});
  9. System.out.println("");
  10. System.out.println("降序排列:");
  11. Collections.reverse(list); // 倒序排列
  12. list.forEach(n ->{System.out.print(n+", ");});
  13. }

          1.2按照自定义的顺序排序

  
  1. private void singleVariableSort2(){
  2. List list = Arrays.asList("北京","上海","北京","广州","广州","上海","北京","上海");
  3. List sortRule = Arrays.asList("北京","上海","广州");
  4. System.out.println("原始数据:");
  5. list.forEach(n ->{System.out.print(n+", ");});
  6. System.out.println("");
  7. System.out.println("排序规则:");
  8. sortRule.forEach(n ->{System.out.print(n+", ");});
  9. System.out.println("");
  10. System.out.println("正序排列:");
  11. Collections.sort(list, new Comparator ()
  12. {
  13. public int compare(String a1, String a2)
  14. {
  15. int io1 = sortRule.indexOf(a1);
  16. int io2 = sortRule.indexOf(a2);
  17. return io1 - io2;
  18. }
  19. });
  20. list.forEach(n ->{System.out.print(n+", ");});
  21. System.out.println("");
  22. System.out.println("倒序排列:");
  23. Collections.sort(list, new Comparator ()
  24. {
  25. public int compare(String a1, String a2)
  26. {
  27. int io1 = sortRule.indexOf(a1);
  28. int io2 = sortRule.indexOf(a2);
  29. return io2 - io1;
  30. }
  31. });
  32. list.forEach(n ->{System.out.print(n+", ");});
  33. }

2.对象List排序

          2.1按照对象单属性升序,降序排序

  
  1. private void entitySort1(){
  2. //Student 的 list 集合
  3. List students = new ArrayList <>();
  4. students.add(new Student("张三",90,180,"电气学院","北京"));
  5. students.add(new Student("李四",80,165,"计算机学院","上海"));
  6. students.add(new Student("王五",91,170,"财经学院","上海"));
  7. students.add(new Student("赵明",80,182,"计算机学院","北京"));
  8. students.add(new Student("钱海",75,181,"计算机学院","广州"));
  9. students.add(new Student("孙理",82,172,"财经学院","上海"));
  10. students.add(new Student("周伟",90,168,"电气学院","广州"));
  11. students.add(new Student("郑亮",80,178,"财经学院","广州"));
  12. System.out.println("原始数据:");
  13. students.forEach(s ->{
  14. System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+ s.getCollege()+""+s.getAddress());});
  15. System.out.println("按照分数升序排序:");
  16. students.sort(comparing(Student::getScore));
  17. students.forEach(s ->{
  18.   System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+ s.getCollege()+""+s.getAddress());});
  19. System.out.println("按照分数降序排序:");
  20. students.sort(comparing(Student::getScore).reversed());
  21. students.forEach(s ->{
  22. System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
  23. }

          2.2按照对象多属性升序,降序排序

  
  1. private void entitySort2(){
  2. //Student 的 list 集合
  3. List students = new ArrayList <>();
  4. students.add(new Student("张三",90,180,"电气学院","北京"));
  5. students.add(new Student("李四",80,165,"计算机学院","上海"));
  6. students.add(new Student("王五",91,170,"财经学院","上海"));
  7. students.add(new Student("赵明",80,182,"计算机学院","北京"));
  8. students.add(new Student("钱海",75,181,"计算机学院","广州"));
  9. students.add(new Student("孙理",82,172,"财经学院","上海"));
  10. students.add(new Student("周伟",90,168,"电气学院","广州"));
  11. students.add(new Student("郑亮",80,178,"财经学院","广州"));
  12. System.out.println("原始数据:");
  13. students.forEach(s ->{
  14. System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
  15. System.out.println("按照分数降序排序,当分数相同时, 按照身高升序排序");
  16. students.sort(comparing(Student::getScore).reversed().thenComparing(Student::getHeight));
  17. students.forEach(s ->{
  18. System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
  19. System.out.println("按照分数降序排序,当分数相同时, 按照身高降序排序");
  20. Collections.sort(students, new Comparator ()
  21. {
  22. public int compare(Student student1, Student student2)
  23. {
  24. if(student1.getScore().equals(student2.getScore())){
  25. return student2.getHeight() - student1.getHeight();
  26. }else{
  27. return student2.getScore() - student1.getScore();
  28. }
  29. }
  30. });
  31. students.forEach(s ->{
  32. System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
  33. }

          2.3按照对象自定义单属性的顺序排序

  
  1. private void entitySort3(){
  2. //Student 的 list 集合
  3. List students = new ArrayList <>();
  4. students.add(new Student("张三",90,180,"电气学院","北京"));
  5. students.add(new Student("李四",80,165,"计算机学院","上海"));
  6. students.add(new Student("王五",91,170,"财经学院","上海"));
  7. students.add(new Student("赵明",80,182,"计算机学院","北京"));
  8. students.add(new Student("钱海",75,181,"计算机学院","广州"));
  9. students.add(new Student("孙理",82,172,"财经学院","上海"));
  10. students.add(new Student("周伟",90,168,"电气学院","广州"));
  11. students.add(new Student("郑亮",80,178,"财经学院","广州"));
  12. System.out.println("原始数据:");
  13. students.forEach(s ->{
  14. System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
  15. System.out.println("自定义按照地区(北京,上海,广州)排序:");
  16. List addressOrder = Arrays.asList("北京","上海","广州");
  17. Collections.sort(students, new Comparator ()
  18. {
  19. public int compare(Student student1, Student student2)
  20. {
  21. int io1 = addressOrder.indexOf(student1.getAddress());
  22. int io2 = addressOrder.indexOf(student2.getAddress());
  23. return io1 - io2;
  24. }
  25. });
  26. students.forEach( s ->{
  27. System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
  28. }

          2.4按照对象自定义多属性的顺序排序

 

  
  1. private void entitySort4(){
  2. //Student 的 list 集合
  3. List students = new ArrayList <>();
  4. students.add(new Student("张三",90,180,"电气学院","北京"));
  5. students.add(new Student("李四",80,165,"计算机学院","上海"));
  6. students.add(new Student("王五",91,170,"财经学院","上海"));
  7. students.add(new Student("赵明",80,182,"计算机学院","北京"));
  8. students.add(new Student("钱海",75,181,"计算机学院","广州"));
  9. students.add(new Student("孙理",82,172,"财经学院","上海"));
  10. students.add(new Student("周伟",90,168,"电气学院","广州"));
  11. students.add(new Student("郑亮",80,178,"财经学院","广州"));
  12. System.out.println("原始数据:");
  13. students.forEach(s ->{
  14. System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
  15. System.out.println("先按照学院(电气学院,计算机学院,财经学院)排序, 当学院相同时,按照地区(北京,上海,广州)排序");
  16. List collegeOrder = Arrays.asList("电气学院","计算机学院","财经学院");
  17. List addressOrder = Arrays.asList("北京","上海","广州");
  18. Collections.sort(students, new Comparator ()
  19. {
  20. public int compare(Student student1, Student student2)
  21. {
  22. if(student1.getCollege().equals(student2.getCollege())){
  23. int io1 = addressOrder.indexOf(student1.getAddress());
  24. int io2 = addressOrder.indexOf(student2.getAddress());
  25. return io1 - io2;
  26. }else{
  27. int io1 = collegeOrder.indexOf(student1.getCollege());
  28. int io2 = collegeOrder.indexOf(student2.getCollege());
  29. return io1 - io2;
  30. }
  31. }
  32. });
  33. students.forEach( s ->{
  34. System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
  35. }

          2.5按照对象属性自定义混合排序

  
  1. private void entitySort5(){
  2. //Student 的 list 集合
  3. List students = new ArrayList <>();
  4. students.add(new Student("张三",90,180,"电气学院","北京"));
  5. students.add(new Student("李四",80,165,"计算机学院","上海"));
  6. students.add(new Student("王五",91,170,"财经学院","上海"));
  7. students.add(new Student("赵明",80,182,"计算机学院","北京"));
  8. students.add(new Student("钱海",75,181,"计算机学院","广州"));
  9. students.add(new Student("孙理",82,172,"财经学院","上海"));
  10. students.add(new Student("周伟",90,168,"电气学院","广州"));
  11. students.add(new Student("郑亮",80,178,"财经学院","广州"));
  12. System.out.println("原始数据:");
  13. students.forEach(s ->{
  14. System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
  15. //先按照分数从高到低排序,当分数相同时,然后按照地区(北京,上海,广州)排序
  16. List addressOrder = Arrays.asList("北京","上海","广州");
  17. Collections.sort(students, new Comparator ()
  18. {
  19. public int compare(Student student1, Student student2)
  20. {
  21. if(student1.getScore().equals(student2.getScore())){
  22. int io1 = addressOrder.indexOf(student1.getAddress());
  23. int io2 = addressOrder.indexOf(student2.getAddress());
  24. return io1 - io2;
  25. }else{
  26. return student2.getScore() - student1.getScore();
  27. }
  28. }
  29. });
  30. System.out.println("");
  31. System.out.println("先按照分数从高到低排序,当分数相同时,然后按照地区(北京,上海,广州)排序:");
  32. students.forEach( s ->{
  33.   System.out.println(s.getName()+" "+ s.getScore()+" "+s.getHeight()+" "+s.getCollege()+""+s.getAddress());});
  34. }

          2.6按照对象单属性升序,降序排序(float类型)

  
  1. private void entitySort6(){
  2. //Shop 的 list 集合
  3. List shops = new ArrayList<>();
  4. shops.add( new Shop( "华润万家", 20200921, ( float) 10000.25));
  5. shops.add( new Shop( "华润万家", 20200922, ( float) 20000.26));
  6. shops.add( new Shop( "华润万家", 20200923, ( float) 9999.37));
  7. shops.add( new Shop( "华润万家", 20200924, ( float) 12587.86));
  8. shops.add( new Shop( "华润万家", 20200925, ( float) 15798.65));
  9. System.out.println( "原始数据:");
  10. shops. forEach(s ->{
  11. System.out.println(s.getName() + " " + s.getDate() + " " + s.getIncome() );
  12. });
  13. System.out.println( "按照收入升序排序:");
  14. shops.sort(comparing(Shop::getIncome));
  15. shops. forEach(s ->{
  16. System.out.println(s.getName() + " " + s.getDate() + " " + s.getIncome());
  17. });
  18. System.out.println( "按照收入降序排序:");
  19. shops.sort(comparing(Shop::getIncome).reversed());
  20. shops. forEach(s ->{
  21. System.out.println(s.getName() + " " + s.getDate() + " " + s.getIncome());
  22. });
  23. }

 

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/280970.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号