Java List 按指定条件排序的几种方式

红太狼 2024-03-31 13:22 153阅读 0赞

  在 Java 项目中,可能会遇到给出一些条件,将 List 元素按照给定条件进行排序的情况。如下述场景。

一、排序场景

  List 保存着一组乱序排列的字符串,Map 中保存着该组字符串各自的优先级。优先级数字从低到高表示优先级依次递减。要求将 List 中的字符串,按照优先级从高到低排序。

二、指定条件排序

  实现 List 排序有多种方法,本文总结以下几种。

2.1 调用 list sort 方法,实现比较器接口进行排序
  1. package com.example.demo.help;
  2. import java.util.*;
  3. public class ListSortTest {
  4. public static void main(String[] args) {
  5. List<String> rules = new ArrayList<>();
  6. rules.add("30003");
  7. rules.add("20002");
  8. rules.add("10001");
  9. rules.add("40004");
  10. rules.add("60006");
  11. rules.add("50005");
  12. Map<String, Integer> ruleUpper = new HashMap<>();
  13. ruleUpper.put("10001", 1);
  14. ruleUpper.put("20002", 2);
  15. ruleUpper.put("30003", 3);
  16. ruleUpper.put("40004", 4);
  17. rules.sort(new Comparator<String>() {
  18. @Override
  19. public int compare(String o1, String o2) {
  20. return ruleUpper.getOrDefault(o1, Integer.MAX_VALUE) - ruleUpper.getOrDefault(o2, Integer.MAX_VALUE);
  21. }
  22. });
  23. System.out.println(rules);
  24. // [10001, 20002, 30003, 40004, 60006, 50005]
  25. }
  26. }
2.2 调用 list sort 方法,通过 lambda 表达式实现排序
  1. package com.example.demo.help;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. public class ListSortTest {
  7. public static void main(String[] args) {
  8. List<String> rules = new ArrayList<>();
  9. rules.add("30003");
  10. rules.add("20002");
  11. rules.add("10001");
  12. rules.add("40004");
  13. rules.add("60006");
  14. rules.add("50005");
  15. Map<String, Integer> ruleUpper = new HashMap<>();
  16. ruleUpper.put("10001", 1);
  17. ruleUpper.put("20002", 2);
  18. ruleUpper.put("30003", 3);
  19. ruleUpper.put("40004", 4);
  20. rules.sort((o1, o2) -> (ruleUpper.getOrDefault(o1, Integer.MAX_VALUE) - ruleUpper.getOrDefault(o2, Integer.MAX_VALUE)));
  21. System.out.println(rules);
  22. // [10001, 20002, 30003, 40004, 60006, 50005]
  23. }
  24. }
2.3 通过 Collections sort 方法,实现比较器接口进行排序
  1. package com.example.demo.help;
  2. import java.util.*;
  3. public class ListSortTest {
  4. public static void main(String[] args) {
  5. List<String> rules = new ArrayList<>();
  6. rules.add("30003");
  7. rules.add("20002");
  8. rules.add("10001");
  9. rules.add("40004");
  10. rules.add("60006");
  11. rules.add("50005");
  12. Map<String, Integer> ruleUpper = new HashMap<>();
  13. ruleUpper.put("10001", 1);
  14. ruleUpper.put("20002", 2);
  15. ruleUpper.put("30003", 3);
  16. ruleUpper.put("40004", 4);
  17. Collections.sort(rules, new Comparator<String>() {
  18. @Override
  19. public int compare(String o1, String o2) {
  20. return ruleUpper.getOrDefault(o1, Integer.MAX_VALUE) - ruleUpper.getOrDefault(o2, Integer.MAX_VALUE);
  21. }
  22. });
  23. System.out.println(rules);
  24. // [10001, 20002, 30003, 40004, 60006, 50005]
  25. }
  26. }

发表评论

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

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

相关阅读