前言
List集合是日常开发中最常用的集合类,没有之一。
在有些场景可能会需要通过程序对集合中的元素进行排序,本文总结一下List集合排序可以通过哪些方式来实现
1.使用集合的工具类Collections
对ArrayList集合进行排序
简单的整数型排序:
当集合的范型为
Integer
类型或者为String
类型并且集合中的元素为数字字符串,我们可以使用集合的工具类Collections
类来对集合中的元素进行排序。
Code
List<Integer> numbers = new ArrayList<>(); Collections.addAll(numbers,1,3,2,6,4,8,7,9); Collections.sort(numbers); System.out.println("numbers:"+numbers.toString()); //运行结果 --> numbers:[1, 2, 3, 4, 6, 7, 8, 9] List<String> strNumbers = new ArrayList<>(); Collections.addAll(strNumbers,"1","3","2","6","4","8","7","9"); Collections.sort(strNumbers); System.out.println("strNumbers:"+strNumbers.toString()); //运行结果 --> strNumbers:[1, 2, 3, 4, 6, 7, 8, 9]
2.使用java8新特性中的stream
,将ArrayList集合中的元素流化实现排序
将元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作的处理,最后由最终操作得到前面处理的结果。
Code
//排序整数类型集合中的元素 List<Integer> numbers = new ArrayList<>(); Collections.addAll(numbers, 1, 3, 2, 6, 4, 8, 7, 9); numbers = numbers.stream().sorted(Integer::compareTo).collect(Collectors.toList()); System.out.println("numbers:" + numbers); //运行结果 --> numbers:[1, 2, 3, 4, 6, 7, 8, 9] //排序其他范型集合中的数据 //比如现在有一个User类型的List集合,要求根据User对象中的age属性对List集合中的User对象进行排序 List<User> userList = new ArrayList<>(); Collections.addAll(userList, new User(1,"Jack",25,"男"), new User(2,"Jason",24,"男"), new User(3,"Jimmy",20,"男"), new User(4,"Lucy",19,"男"), new User(5,"Tom",21,"男") ); userList =userList .stream() .sorted(Comparator.comparing(User::getAge).reversed()) //.sorted(Comparator.comparing(User::getAge).reversed()) 加上reversed()方法就是逆序排序 .collect(Collectors.toList()); System.out.println("userList:"+userList.toString()); //运行结果 --> userList:[User{id=4, name='Lucy', age=19, sex='男'}, User{id=3, name='Jimmy', age=20, sex='男'}, User{id=5, name='Tom', age=21, sex='男'}, User{id=2, name='Jason', age=24, sex='男'}, User{id=1, name='Jack', age=25, sex='男'}]
3.使用比较器对ArrayList集合进行排序
如果方式一和方式二都不能解决的话可以通过比较器来解决。
比如现在有一个ArrayList集合,它的范型是一个Map,要求根据Map元素中的某个Key的Value值对集合中的Map元素进行排序
Code
Collections.sort(mapList, new Comparator<Map<String, Object>>() { @Override public int compare(Map<String, Object> o1, Map<String, Object> o2) { Integer faceValueOne = Integer.valueOf(o1.get("faceValue").toString()); Integer faceValueTwo = Integer.valueOf(o2.get("faceValue").toString()); return faceValueOne.compareTo(faceValueTwo); } });
4.如果考虑到性能或者是多个条件排序我们可以使用算法进行排序
算法排序是衍生于数组的排序,只适用于有索引型集合。
算法排序主要包括:
冒泡排序
、选择排序
、插入排序
、二分法排序
、快速排序
、堆排序
详细案例请参照以下文章
热门文章
- 12月15日 | Trojan节点订阅每天更新21.1M/S免费节点订阅链接
- 12月8日 | Trojan节点订阅每天更新19.1M/S免费节点订阅链接
- 12月20日 | Trojan节点订阅每天更新22.8M/S免费节点订阅链接
- 宠物粮市场销售渠道有哪些类型(宠物粮卖点)
- 天津宠物领养机构名单整理(天津宠物猫领养中心)
- PHP对象接口
- 小型宠物粮食加工设备价格表最新(小型宠物粮加工厂需要什么手续)
- 宠物领养平台有哪几个平台 宠物领养平台有哪几个平台好
- 宠物零食加工厂要投资多少亿 宠物零食加工厂要投资多少亿元
- java 写文件 权限不够_教你解决Linux系统中JAVA创建文件后权限不足的问题