这篇博客主要总结一下平时比较常用的几种集合排序(升序降序)方法。

1.List排序

1)基本数据类型的包装类集合排序

import com.xxxx.domain.Emp;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;import java.util.*;/*** @desc 集合排序* @author gc* @date 2021/5/25 */
@SpringBootTest
public class CollectionSortTest {/*** 基本类型包装类list排序*/@Testpublic void sortList1(){List<Integer> lists = new ArrayList<>(3);lists.add(5);lists.add(1);lists.add(10);//方法1:使用Collections进行排序://升序Collections.sort(lists);//降序Collections.sort(lists,Comparator.reverseOrder());//方法2:使用Java8 Stream进行排序://升序lists = lists.stream().sorted().collect(Collectors.toList());//降序lists = lists.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());for (Integer ele : lists) {System.out.println(ele);}}}

2)自定义实体类集合排序:

    /*** 实体类list排序*/@Testpublic void sortList2(){List<Emp> lists = new ArrayList<>(3);lists.add(new Emp(3, "员工1"));lists.add(new Emp(1, "员工2"));lists.add(new Emp(2, "员工3"));//方法1:借助Collections排序//升序Collections.sort(lists, Comparator.comparing(Emp::getAge));//降序Collections.sort(lists, Comparator.comparing(Emp::getAge).reversed());//方法2:借助Java8 Stream排序://升序lists = lists.stream().sorted(Comparator.comparing(Emp::getAge)).collect(Collectors.toList());//降序lists = lists.stream().sorted(Comparator.comparing(Emp::getAge).reversed()).collect(Collectors.toList());for (Emp ele : lists) {System.out.println(ele);}}

2.Map排序

1)单纯根据key排序(用TreeMap实现):

    @Testpublic void sortMap1(){//默认升序Map<String, String> map = new TreeMap<>(String::compareTo);//降序//Map<String, String> map = new TreeMap<>(Comparator.reverseOrder());map.put("a","2");map.put("c","5");map.put("d","6");map.put("b","1");map.forEach((k,v)->{System.out.println(k+":"+v);});}

2)根据key或value排序:

    @Testpublic void sortMap2(){Map map = new HashMap<>();map.put(5, 2);map.put(2, 5);map.put(9,1);List<Map.Entry<Integer, Integer>> mapList = new ArrayList<>(map.entrySet());//根据key默认升序Collections.sort(mapList, Comparator.comparing(Map.Entry::getKey));//根据key降序Collections.sort(mapList, (o1, o2) -> o2.getKey().compareTo(o1.getKey()));//根据value默认升序Collections.sort(mapList, Comparator.comparing(Map.Entry::getValue));//根据value降序Collections.sort(mapList, (o1, o2) -> o2.getValue().compareTo(o1.getValue()));mapList.forEach(o -> System.out.println(o.getKey() + ":" + o.getValue()));//如果一定要返回一个map,就new一个LinkedHashMap,将list中所有值依次put进去就可以/*LinkedHashMap<String,String> linkedHashMap = new LinkedHashMap<>();mapList.forEach(o -> {linkedHashMap.put(o.getKey(), o.getValue());});*/}

3.Set排序

网上Set排序的例子很多,不过大部分排序方法是大同小异的,通常最后排序都是依据TreeSet进行排序:

1.基本类型包装类集合的Set排序:

    @Testpublic void sortSet1(){//方法1:使用TreeSet排序//升序TreeSet<Long> sets = new TreeSet<>();//降序TreeSet<Long> reverseSets = new TreeSet<>(Comparator.reverseOrder());sets.add(5L);sets.add(2L);sets.add(19L);//方法2:使用Java8 Stream排序(Set转为List)://这种排序法的set类型可以是TreeSet,也可以是HashSet//升序List<Long> collect = sets.stream().sorted().collect(Collectors.toList());//降序List<Long> reverseCollect = sets.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());}

2.自定义实体类排序:

    /*** 按照实体类某些属性排序*/@Testpublic void sortSet2(){//方法1:使用TreeSet排序//升序TreeSet<Emp> sets = new TreeSet<>(Comparator.comparing(Emp::getAge));sets.add(new Emp(5, "员工1"));sets.add(new Emp(12, "员工2"));sets.add(new Emp(9, "员工3"));//降序TreeSet<Emp> reverseSets = new TreeSet<>(Comparator.comparing(Emp::getAge).reversed());//方法2:使用Java8 Stream排序(转为list)://这种排序法的set类型可以是TreeSet,也可以是HashSet//升序List<Emp> collect = sets.stream().sorted(Comparator.comparing(Emp::getAge)).collect(Collectors.toList());//降序List<Emp> reverseCollect = sets.stream().sorted(Comparator.comparing(Emp::getAge).reversed()).collect(Collectors.toList());}

附上Emp类:

package com.xxxx.domain;import lombok.Data;/*** @desc 员工实体类* @author gc* @date 2021/5/25 */
@Data
public class Emp {public Emp(Integer age, String name) {this.age = age;this.name = name;}private Integer age;private String name;
}

参照的博客:

如何对map进行排序_顽石九变的博客-CSDN博客_map 排序

集合(list、set、map)的简单升序降序实现相关推荐

  1. java升序降序排列desc,TreeMap升序|降序排列和按照value进行排序

    TreeMap 升序|降序排列 import java.util.Comparator; import java.util.TreeMap; public class Main { public st ...

  2. C# List.sort排序详解(多权重,升序降序)

    很多人可能喜欢Linq的orderBy排序,可惜U3D里面linq在Ios上会报错,所以就必须使用list的排序. 其实理解了并不难 升序降序比较 sort有三种结果 1,-1,0分别是大,小,相等. ...

  3. java treemap value排序_Java TreeMap升序|降序排列和按照value进行排序的案例

    TreeMap 升序|降序排列 import java.util.Comparator; import java.util.TreeMap; public class Main { public st ...

  4. 先用总分升序再用计算机降序,怎样用升序降序给EXCEL排名

    怎样用升序降序给EXCEL排名 (2008-12-14 16:35:01) 标签: 电脑 单元格 数据清单 h2 if 教育 在用Excel制作相关的数据表格时,我们可以利用其强大的排序功能,浏览.查 ...

  5. python中升序降序问题_飘逸的python - 有的升序有的降序的情况下怎么多条件排序...

    之前在统计导出各区服玩家消费的时候需要进行升序降序混搭的多条件排序. 需求是这样的.区服从小到大排,如果区服相同,则按消费从大到小排. 实现方法是利用python的sort算法是稳定排序,对数据进行多 ...

  6. Java的Comparator排序(升序降序)理解

    Java的Comparator排序(升序降序)理解 int compare(T o1, T o2); 这里o1表示位于前面的对象,o2表示后面的对象 返回-1(或负数),表示不需要交换01和02的位置 ...

  7. PHP中 如何将二位数组按某一个或多个字段值(升序/降序)排序?数字索引被重置,关联索引保持不变...

    如何将二位数组按某一个或多个字段值(升序/降序)排序?数字索引被重置,关联索引保持不变 1.$arr=array( 2. array('id'=>1,'name'=>'will','age ...

  8. c语言用指针升序降序,C语言函数序——升序降序.doc

    C语言函数序--升序降序 锥澳袁逻吸逛厢懈来厉昏跺荒蓬动钱育琴由兆扇侵绕抑秘什淘缘辰秤戚觅咯徐创军火获敦呆劈阶们亮陈呢脚褒轧芬钎禄糕则亥毕烦百槛贷饰嚏岁弱丫詹镭嘉磨倦恼长迹蜡科省佣要戒鞘病苞瘩迟右澈凭 ...

  9. 快速排序(升序+降序)

    快速排序(升序+降序) 对于大部分的书上的快速排序,都是升序.对于降序,大部分人应该和我一样,并没有什么概念.当然,没有概念的主要原因就是你对快排机制还是不够透彻. 下面是笔者花费很久时间才搞明白的点 ...

最新文章

  1. 2021年中国数据中心行业发展现状与数据需求分析 互联网产业发展带来良好发展机遇...
  2. linux系统安装nc,Lifelong learner.
  3. 程序一旦发觉写得不理想,那就得重构它
  4. c语言银行卡管理系统程序设计报告,C语言课程设计报告(银行账户信息管理系统).doc...
  5. php月末,php获取月头月末
  6. 网易高并发优化 | 公开课-02
  7. scala 基础入门
  8. PHPCMS V9 学习总结
  9. 结尾匹配_2.nginx的server_name匹配顺序
  10. 黑客帝国中的代码雨写法
  11. 既要面子,也要里子,车企成不了自动驾驶的“独行侠”
  12. 阿拉伯数字改为汉字的大写
  13. 0x50 动态规划(练习)20:干草堆(题解)
  14. FIT2CLOUD飞致云发布开源轻量级云管平台CloudExplorer Lite
  15. 获取谷歌浏览器Chrome缓存目录
  16. 你不知道的东西----半月痕(中医诊断)
  17. 4星|《维米尔的帽子》:17世纪荷兰画中的全球化踪迹,鸦片与烟草被当时中国主流文化接纳的故事...
  18. Sqlite3安装使用(基于Windows 10)
  19. 用open3d将stl格式转化为ply格式,并且单位从mm转为m
  20. PS2022下载链接分享

热门文章

  1. 混凝土弹性波速计算公式_混凝土弹性检测
  2. 隐藏的历史-是什么成就了今天的硅谷?
  3. unity3D更换编辑器版本脚本无法识别MonoBehaviour和unityengine解决方法
  4. 在Visual C++中实现一个DLL木马
  5. 【转】以太坊钱包分析与介绍
  6. 137813-35-5,cyclo(Arg-Gly-Asp-D-Phe-Val)分子式:C26H38N8O7
  7. 康复评定试题库-康复评定的题库
  8. 为什么程序员工位上总会摆着小黄鸭?
  9. Listview上的checkbox重复和滚动自动调用chexkbox设置监听
  10. 同时查询壹米滴答多个单号物流,并分析提前签收