java排序

x33g5p2x  于2022-02-09 转载在 Java  
字(11.2k)|赞(0)|评价(0)|浏览(567)

java排序

Map根据key排序

  1. //升序
  2. Map<Integer,String> treeMap = new TreeMap<>();
  3. treeMap.put(1,"111");
  4. treeMap.put(8,"888");
  5. treeMap.put(4,"444");
  6. treeMap.put(2,"222");
  7. System.out.println(treeMap); //输出{1=111, 2=222, 4=444, 8=888}
  8. //降序:
  9. Map<Integer,String> treeMap = new TreeMap<>((o1,o2)->{
  10. return o2.compareTo(o1);
  11. });
  12. treeMap.put(1,"111");
  13. treeMap.put(8,"888");
  14. treeMap.put(4,"444");
  15. treeMap.put(2,"222");
  16. System.out.println(treeMap);输出{8=888, 4=444, 2=222, 1=111}

Map根据value排序

对value降序:

  1. Map<String, Double> budget = new HashMap<>();
  2. budget.put("普通账户", 1000.00);
  3. budget.put("信用账户", 2000.00);
  4. budget.put("期权账户",500.00);
  5. budget.put("理财账户", 4000.00);
  6. //jdk8通过stream实现对Map降序排序
  7. Map<String, Double> sorted = budget
  8. .entrySet()
  9. .stream()
  10. .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
  11. .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));
  12. //sorted为{理财账户=4000.0, 信用账户=2000.0, 普通账户=1000.0, 期权账户=500.0}

对value降序并只要前俩个:

  1. Map<String, Double> budget = new HashMap<>();
  2. budget.put("普通账户", 1000.00);
  3. budget.put("信用账户", 2000.00);
  4. budget.put("期权账户",500.00);
  5. budget.put("理财账户", 4000.00);
  6. //jdk8通过stream实现对Map降序排序
  7. Map<String, Double> sorted = budget
  8. .entrySet()
  9. .stream()
  10. .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
  11. .limit(2)
  12. .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));
  13. //sorted为{理财账户=4000.0, 信用账户=2000.0}

对value升序:

  1. Map<String, Double> budget = new HashMap<>();
  2. budget.put("普通账户", 1000.00);
  3. budget.put("信用账户", 2000.00);
  4. budget.put("期权账户",500.00);
  5. budget.put("理财账户", 4000.00);
  6. //jdk8通过stream实现对Map升序排序
  7. Map<String, Double> sorted = budget
  8. .entrySet()
  9. .stream()
  10. .sorted(Map.Entry.comparingByValue(Comparator.naturalOrder()))
  11. .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));
  12. //sorted为{期权账户=500.0, 普通账户=1000.0, 信用账户=2000.0, 理财账户=4000.0}

List< Map>根据map里某一value排序

方式一:

  1. List<Map<String, Object>> resultlist = new ArrayList<>();
  2. Map<String, Object> map1 = new HashMap<String, Object>();
  3. map1.put("id", "1");
  4. map1.put("name", "张三");
  5. map1.put("Score", 86.5);
  6. Map<String, Object> map2 = new HashMap<String, Object>();
  7. map2.put("id", "2");
  8. map2.put("name", "李四");
  9. map2.put("Score", 90.0);
  10. Map<String, Object> map3 = new HashMap<String, Object>();
  11. map3.put("id", "3");
  12. map3.put("name", "王五");
  13. map3.put("Score", 70.5);
  14. resultlist.add(map1);
  15. resultlist.add(map2);
  16. resultlist.add(map3);
  17. Collections.sort(resultlist, new Comparator<Map<String, Object>>() {
  18. @Override
  19. public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  20. Double one = (Double) o1.get("Score");
  21. Double two = (Double) o2.get("Score");
  22. return one.compareTo(two); //one.compareTo(two)为升序,two.compareTo(one)为降序
  23. }
  24. });
  25. System.out.println(resultlist);
  26. //输出[{Score=70.5, name=王五, id=3}, {Score=86.5, name=张三, id=1}, {Score=90.0, name=李四, id=2}]

方式二:

  1. List<Map<String, Object>> resultlist = new ArrayList<>();
  2. Map<String, Object> map1 = new HashMap<String, Object>();
  3. map1.put("id", "1");
  4. map1.put("name", "张三");
  5. map1.put("Score", 86.5);
  6. Map<String, Object> map2 = new HashMap<String, Object>();
  7. map2.put("id", "2");
  8. map2.put("name", "李四");
  9. map2.put("Score", 90.0);
  10. Map<String, Object> map3 = new HashMap<String, Object>();
  11. map3.put("id", "3");
  12. map3.put("name", "王五");
  13. map3.put("Score", 70.5);
  14. resultlist.add(map1);
  15. resultlist.add(map2);
  16. resultlist.add(map3);
  17. Collections.sort(resultlist, (o1, o2) -> {
  18. Double one = Double.valueOf(o1.get("Score").toString()) ;
  19. Double two = Double.valueOf(o2.get("Score").toString()) ;
  20. return one.compareTo(two); //one.compareTo(two)为升序,two.compareTo(one)为降序
  21. });
  22. System.out.println(resultlist);
  23. //输出[{Score=70.5, name=王五, id=3}, {Score=86.5, name=张三, id=1}, {Score=90.0, name=李四, id=2}]

List< Object>根据Object的某一属性对List进行排序

升序:

  1. List<User> userList = new ArrayList<>(Arrays.asList(
  2. new User(1L,new BigDecimal("10"),18),
  3. new User(2L,new BigDecimal("20"),19),
  4. new User(3L,new BigDecimal("100"),17)));
  5. System.out.println("排序前"+userList);
  6. userList = userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
  7. System.out.println("排序后"+userList);

输出结果

  1. 排序前[User{id=1, money=10, age=18}, User{id=2, money=20, age=19}, User{id=3, money=100, age=17}]
  2. 排序后[User{id=3, money=100, age=17}, User{id=1, money=10, age=18}, User{id=2, money=20, age=19}]

倒序:

  1. List<User> userList = new ArrayList<>(Arrays.asList(
  2. new User(1L,new BigDecimal("10"),18),
  3. new User(2L,new BigDecimal("20"),19),
  4. new User(3L,new BigDecimal("100"),17)));
  5. System.out.println("排序前"+userList);
  6. userList = userList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
  7. System.out.println("排序后"+userList);

输出结果

  1. 排序前[User{id=1, money=10, age=18}, User{id=2, money=20, age=19}, User{id=3, money=100, age=17}]
  2. 排序后[User{id=2, money=20, age=19}, User{id=1, money=10, age=18}, User{id=3, money=100, age=17}]

多条件排序:

  1. List<User> userList = new ArrayList<>(Arrays.asList(
  2. new User(1L,new BigDecimal("10"),18),
  3. new User(2L,new BigDecimal("20"),19),
  4. new User(3L,new BigDecimal("100"),18)));
  5. System.out.println("排序前"+userList);
  6. userList = userList.stream().sorted(Comparator.comparing(User::getAge).thenComparing(User::getId)).collect(Collectors.toList());
  7. System.out.println("排序后"+userList);

输出结果

  1. 排序前[User{id=1, money=10, age=18}, User{id=2, money=20, age=19}, User{id=3, money=100, age=18}]
  2. 排序后[User{id=1, money=10, age=18}, User{id=3, money=100, age=18}, User{id=2, money=20, age=19}]

复杂List<Map<String, List<Map<String, Object>>>>排序实例

要求:不仅内部要根据Score排序,整个List也要根据Score排序

  1. List<Map<String, List<Map<String, Object>>>> tagsList = new ArrayList<>();
  2. List<Map<String, Object>> resultlist1 = new ArrayList<>();
  3. Map<String, List<Map<String, Object>>> listMap1 = new HashMap<>();
  4. Map<String, Object> map1 = new HashMap<String, Object>();
  5. map1.put("id", "1");
  6. map1.put("name", "张一");
  7. map1.put("Score", 7L);
  8. Map<String, Object> map2 = new HashMap<String, Object>();
  9. map2.put("id", "2");
  10. map2.put("name", "李一");
  11. map2.put("Score", 100L);
  12. Map<String, Object> map3 = new HashMap<String, Object>();
  13. map3.put("id", "3");
  14. map3.put("name", "王一");
  15. map3.put("Score", 86L);
  16. Map<String, Object> map4 = new HashMap<String, Object>();
  17. map4.put("id", "4");
  18. map4.put("name", "赵一");
  19. map4.put("Score", 0L);
  20. resultlist1.add(map1);
  21. resultlist1.add(map2);
  22. resultlist1.add(map3);
  23. resultlist1.add(map4);
  24. listMap1.put("1", resultlist1);
  25. tagsList.add(listMap1);
  26. List<Map<String, Object>> resultlist2 = new ArrayList<>();
  27. Map<String, List<Map<String, Object>>> listMap2 = new HashMap<>();
  28. Map<String, Object> map2_1 = new HashMap<String, Object>();
  29. map2_1.put("id", "1");
  30. map2_1.put("name", "张二");
  31. map2_1.put("Score", 709L);
  32. Map<String, Object> map2_2 = new HashMap<String, Object>();
  33. map2_2.put("id", "2");
  34. map2_2.put("name", "李二");
  35. map2_2.put("Score", 0L);
  36. Map<String, Object> map2_3 = new HashMap<String, Object>();
  37. map2_3.put("id", "3");
  38. map2_3.put("name", "王二");
  39. map2_3.put("Score", 456L);
  40. Map<String, Object> map3_4 = new HashMap<String, Object>();
  41. map3_4.put("id", "4");
  42. map3_4.put("name", "赵二");
  43. map3_4.put("Score", 0L);
  44. resultlist2.add(map2_1);
  45. resultlist2.add(map2_1);
  46. resultlist2.add(map2_3);
  47. resultlist2.add(map3_4);
  48. listMap2.put("2", resultlist2);
  49. tagsList.add(listMap2);
  50. List<Map<String, Object>> resultlist3 = new ArrayList<>();
  51. Map<String, List<Map<String, Object>>> listMap3 = new HashMap<>();
  52. Map<String, Object> map3_1 = new HashMap<String, Object>();
  53. map3_1.put("id", "1");
  54. map3_1.put("name", "张三");
  55. map3_1.put("Score", 9L);
  56. Map<String, Object> map3_2 = new HashMap<String, Object>();
  57. map3_2.put("id", "2");
  58. map3_2.put("name", "李三");
  59. map3_2.put("Score", 0L);
  60. Map<String, Object> map3_3 = new HashMap<String, Object>();
  61. map3_3.put("id", "3");
  62. map3_3.put("name", "王三");
  63. map3_3.put("Score", 86L);
  64. Map<String, Object> map2_4 = new HashMap<String, Object>();
  65. map2_4.put("id", "4");
  66. map2_4.put("name", "赵三");
  67. map2_4.put("Score", 920L);
  68. resultlist3.add(map3_1);
  69. resultlist3.add(map3_2);
  70. resultlist3.add(map3_3);
  71. resultlist3.add(map2_4);
  72. listMap3.put("3", resultlist3);
  73. tagsList.add(listMap3);
  74. System.out.println("未排序时的tagsList:" + tagsList);
  75. //先对每一个里的Score降序排序,排序后tagsList里的每一个元素中的List<Map<String, Object>>都是有序的
  76. for (Map<String, List<Map<String, Object>>> ins : tagsList) {
  77. for (List<Map<String, Object>> v : ins.values()) {
  78. Collections.sort(v, (o1, o2) -> {
  79. Long one = Long.valueOf(o1.get("Score").toString());
  80. Long two = Long.valueOf(o2.get("Score").toString());
  81. return two.compareTo(one);
  82. });
  83. }
  84. }
  85. System.out.println("对每一个Score内部降序排序后的tagsList:" + tagsList);
  86. Collections.sort(tagsList, (o1, o2) -> {
  87. Long one = 0L;
  88. Long two = 0L;
  89. for (List<Map<String, Object>> v : o1.values()) {
  90. one = Long.valueOf(v.get(0).get("Score").toString());
  91. break;
  92. }
  93. for (List<Map<String, Object>> v : o2.values()) {
  94. two = Long.valueOf(v.get(0).get("Score").toString());
  95. break;
  96. }
  97. return two.compareTo(one);
  98. });
  99. System.out.println("根据最内层的最大值排序后的tagsList:" + tagsList);

输出结果

  1. 未排序时的tagsList
  2. [{1=[{Score=7, name=张一, id=1}, {Score=100, name=李一, id=2}, {Score=86, name=王一, id=3}, {Score=0, name=赵一, id=4}]},
  3. {2=[{Score=709, name=张二, id=1}, {Score=709, name=张二, id=1}, {Score=456, name=王二, id=3}, {Score=0, name=赵二, id=4}]},
  4. {3=[{Score=9, name=张三, id=1}, {Score=0, name=李三, id=2}, {Score=86, name=王三, id=3}, {Score=920, name=赵三, id=4}]}]
  5. 对每一个Score内部降序排序后的tagsList
  6. [{1=[{Score=100, name=李一, id=2}, {Score=86, name=王一, id=3}, {Score=7, name=张一, id=1}, {Score=0, name=赵一, id=4}]},
  7. {2=[{Score=709, name=张二, id=1}, {Score=709, name=张二, id=1}, {Score=456, name=王二, id=3}, {Score=0, name=赵二, id=4}]},
  8. {3=[{Score=920, name=赵三, id=4}, {Score=86, name=王三, id=3}, {Score=9, name=张三, id=1}, {Score=0, name=李三, id=2}]}]
  9. 根据最内层的最大值排序后的tagsList
  10. [{3=[{Score=920, name=赵三, id=4}, {Score=86, name=王三, id=3}, {Score=9, name=张三, id=1}, {Score=0, name=李三, id=2}]},
  11. {2=[{Score=709, name=张二, id=1}, {Score=709, name=张二, id=1}, {Score=456, name=王二, id=3}, {Score=0, name=赵二, id=4}]},
  12. {1=[{Score=100, name=李一, id=2}, {Score=86, name=王一, id=3}, {Score=7, name=张一, id=1}, {Score=0, name=赵一, id=4}]}]

相关文章

最新文章

更多