当前位置:   article > 正文

JAVA List自定义排序 多字段排序_java中list对多个字段排序

java中list对多个字段排序

简单的排序一般用一个sorted就行

list = list.stream().sorted(Comparator.comparing(TestSort::getState)).collect(Collectors.toList());

再稍微多一个字段,说不定加一个.thenComparing(TestSort::getCode).reversed()也能实现需求

  1. //reversed()倒序排列,默认都是从小到大排序,加上reversed实现倒序
  2. list = list.stream().sorted(Comparator.comparing(TestSort::getState)
  3. .thenComparing(TestSort::getCode).reversed()).collect(Collectors.toList());

但有一些稍微复杂的,存在逻辑的判断,就需要自定义排序。

比如根据多个字段比较排序,根据指定的中文排序,等等。都可以用Collections.sort,重写compare方法。

可以自己先通过一个小demo理解一下compare返回值,多考虑各种情况,排序需求基本都能实现。

需求:把state为3、5的值置顶后,根据code排序。

  1. import java.util.Collections;
  2. import java.util.Comparator;
  3. import java.util.List;
  4. import java.util.stream.Collectors;
  5. import java.util.stream.Stream;
  6. /**
  7. * @author ZoeySir
  8. */
  9. public class TestSort {
  10. private int code;
  11. private int state;
  12. public int getCode() {
  13. return code;
  14. }
  15. public void setCode(int code) {
  16. this.code = code;
  17. }
  18. public int getState() {
  19. return state;
  20. }
  21. public void setState(int state) {
  22. this.state = state;
  23. }
  24. public TestSort(int code, int state) {
  25. this.code = code;
  26. this.state = state;
  27. }
  28. public static void main(String[] args) {
  29. TestSort s1 = new TestSort(2, 5);
  30. TestSort s2 = new TestSort(4, 1);
  31. TestSort s3 = new TestSort(5, 2);
  32. TestSort s4 = new TestSort(3, 3);
  33. TestSort s5 = new TestSort(1, 2);
  34. List<TestSort> sortList = Stream.of( s1,s4, s2,s5,s3).collect(Collectors.toList());
  35. //自定义对象字段排序
  36. //需求:把state为3、5的值置顶后,根据code排序
  37. Collections.sort(sortList, new Comparator<TestSort>() {
  38. /**
  39. * 两个对象做比较,自定义排序
  40. */
  41. @Override
  42. public int compare(TestSort o1, TestSort o2) {
  43. //返回值解释:返回值为-1 、0、1
  44. //-1代表左边小于右边,即o1 < o2
  45. //0代表相等,即o1 = o2
  46. //1代表左边大于右边,即o1 > o2
  47. if (o1.getState() == 3 || o1.getState() == 5 ){
  48. if (o1.getCode() > o2.getCode()){
  49. return 1;
  50. }
  51. return -1;
  52. }
  53. if (o2.getState() == 3 || o2.getState() == 5){
  54. return 1;
  55. }
  56. if (o1.getCode() < o2.getCode()){
  57. return -1;
  58. }
  59. if (o1.getCode() > o2.getCode()){
  60. return 1;
  61. }
  62. return 0;
  63. }
  64. });
  65. for (TestSort t : sortList) {
  66. System.out.println(t.getCode() + "===" + t.getState());
  67. }
  68. }
  69. }

输出:

perfect~

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

闽ICP备14008679号