regulationOrder = Arrays.asList_java中lis">
当前位置:   article > 正文

Java中如何实现List的自定义排序_java中list自定义排序

java中list自定义排序

最近项目中遇到一个问题,需要对List进行自定义顺序排序,打个比方,现在我有一个SortStudent类,需要对它的年龄降序排序,再对他的省份进行自定义的排序,要求按照:"安徽", "北京", "上海", "深圳", "广州"的顺序排列,如何实现呢?直接上代码,很简单,关键地方有注释,应该是一目了然的。

  1. public class CustomSort {
  2. private static final List<String> regulationOrder = Arrays.asList("安徽", "北京", "上海", "深圳", "广州");
  3. public static void main(String[] args) {
  4. List<SortStudent> students = new ArrayList<>();
  5. SortStudent student1 = new SortStudent("Mike", 5, "上海");
  6. SortStudent student2 = new SortStudent("Mike", 5, "安徽");
  7. SortStudent student3 = new SortStudent("Mike", 5, "北京");
  8. SortStudent student4 = new SortStudent("Mike", 4, "深圳");
  9. SortStudent student5 = new SortStudent("Mike", 4, "安徽");
  10. SortStudent student6 = new SortStudent("Mike", 6, "南京");
  11. SortStudent student7 = new SortStudent("Mike", 6, "广州");
  12. students.add(student1);
  13. students.add(student2);
  14. students.add(student3);
  15. students.add(student4);
  16. students.add(student5);
  17. students.add(student6);
  18. students.add(student7);
  19. //根据省份排序
  20. students.sort((o1, o2) -> {
  21. int index1 = regulationOrder.indexOf(o1.getProvince());
  22. if (index1 == -1)
  23. return 1;
  24. int index2 = regulationOrder.indexOf(o2.getProvince());
  25. if (index2 == -1)
  26. return -1;
  27. return index1 - index2;
  28. });
  29. //注意:低优先级的要先排序,这样高优先级的才不会被打乱,我这里高优先级的是age,低优先级的是province
  30. //根据年龄降序排序,stream排序不改变原始list顺序
  31. //结果:先按年龄降序,再按省份特定顺序排序
  32. List<SortStudent> sortedList = students.stream()
  33. .sorted(Comparator.comparing(SortStudent::getAge).reversed()).collect(Collectors.toList());
  34. for (int i = 0; i < students.size(); i++) {
  35. System.out.println("省份排序后: " + students.get(i).getProvince() + " - " + students.get(i).getAge()
  36. + " 年龄排序后: " + sortedList.get(i).getProvince() + " - " + sortedList.get(i).getAge());
  37. }
  38. }
  39. @Data
  40. @AllArgsConstructor
  41. @NoArgsConstructor
  42. private static class SortStudent {
  43. private String name;
  44. private int age;
  45. private String province;
  46. }
  47. }

执行效果如下: 

可以看到,结果达到了我们想要的效果。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/440081
推荐阅读
相关标签
  

闽ICP备14008679号