List集合多次排序
写在前面:
有时候我们在查询数据展示到前台页面的时候,需要对数据进行排序,特别是按照多个字段进行排序,会很麻烦写的代码也比较多。这个时候java8的特性可以让我们很方便的对数据进行排序。
话不多说,直接上代码。
public class Test {
public static void main(String[] args) {
List<DoubleSort> list = new ArrayList<DoubleSort>();
list.add(new DoubleSort(0, "1",12));
list.add(new DoubleSort(3, "2",15));
list.add(new DoubleSort(2, "22",12));
list.add(new DoubleSort(3, "11",17));
list.add(new DoubleSort(3, "222",13));
list.add(new DoubleSort(3, null,10));
// 简单排序 按照id升序排序
list.sort(Comparator.comparing(DoubleSort::getId));
list.forEach(e -> System.out.println(e.getId() + "," + e.getName()+","+e.getAge()));
System.out.println("----");
// 二次排序 按照id,age升序排序(先按照id排序,id相同的按照age排序)
list.sort(Comparator.comparing(DoubleSort::getId).thenComparing(DoubleSort::getAge));
list.forEach(e -> System.out.println(e.getId() + "," + e.getName()+","+e.getAge()));
System.out.println("----");
// 多次排序 按照id,name,age升序排序(先按照id排序,id相同的按照name升序排序(当name有null值,排序最前面),然后name相同的按照age升序排序)
list.sort(Comparator.comparing(DoubleSort::getId).thenComparing(DoubleSort::getName, Comparator.nullsFirst(Comparator.naturalOrder())).thenComparing(DoubleSort::getAge));
list.forEach(e -> System.out.println(e.getId() + "," + e.getName()));
}
}
上面代码的最后一个排序中包含有当指定属性为null时的处理方式,我们可以将为null的排在最前面,直接调用对应的方法即可,非常方便,省去了不少的代码呢!
参考资料:
https://blog.csdn.net/york_2016/article/details/80169467------java 8 二次排序,和空指针处理示例
List集合多次排序的更多相关文章
- List集合中元素排序
应用场景: 在开发中经常遇到要对List<Object>集合进行排序,并且是根据集合中的对象的某个属性来进行排序 --------以下就此做出的解决方案 public static ...
- .NET/C#中对自定义对象集合进行自定义排序的方法
一个集合可否排序,要看系统知不知道排序的规则,像内建的系统类型,int ,string,short,decimal这些,系统知道怎么排序,而如果一个集合里面放置的是自定义类型,比如自己定义了一个Car ...
- Java Object类 instanceof关键字 练习:判断是否为同一人 集合按照人的年龄排序,如果年龄相同按名字的字母顺序升序 Comparator比较器
package com.swift; public class Same_Person_Test { public static void main(String[] args) { /* * Obj ...
- 【转载】 C#中List集合使用OrderByDescending方法对集合进行倒序排序
在C#的List集合操作中,有时候需要针对List集合进行排序操作,如果是对List集合按照元素对象或者元素对象的某个属性进行倒序排序的话,可以使用OrderByDescending方法来实现,Ord ...
- Java集合中对象排序
集合中的对象排序需求还是比較常见的.当然我们能够重写equals方法,循环比較:同一时候Java为我们提供了更易使用的APIs.当须要排序的集合或数组不是单纯的数字型时,通常能够使用Comparato ...
- TreeMap集合特点、排序原理
TreeMap特点(类似于TreeSet): 1.无序,不允许重复(无序指元素顺序与添加顺序不一致) 2.TreeMap集合默认会对键进行排序,所以键必须实现自然排序和定制排序中的一种 3..底层使用 ...
- 集合List的排序
自从出现了泛型和LINQ,对于集合的排序变得更简单了. //倒序 list.OrderByDescending(p=> p.a).ThenByDescending(p => p.b); / ...
- TreeSet集合的自然排序与比较器排序、Comparable接口的compareTo()方法
[自然排序] package com.hxl; public class Student implements Comparable<Student> { private String n ...
- Java List集合冒泡法排序的两种实现
冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已 ...
- JDK8新特性:使用stream、Comparator和Method Reference实现集合的优雅排序
大家对java接口Comparator和Comparable都不陌生,JDK8里面Comparable还和以前一样,没有什么改动:但是Comparator在之前基础上增加了很多static和defau ...
随机推荐
- python 版本zabbix_sender
python版本的zabbix_sender: 使用方法: 1.导入 : from zbx_send import info 2.实例化: test=info() 3.支持 ...
- 信息收集之zoomeye
一.浏览器上使用api接口 1.https://api.zoomeye.org/user/login post传参:{"username" : "username&quo ...
- CF148A Insomnia cure
公主睡前数龙, 每隔k, l, m, n只都会用不同的技能攻击龙. 假定共数了d只龙, 问共有多少龙被攻击了. 思路: 用一个visit数组记录被攻击过的dragon, 最后遍历visit数组统计被攻 ...
- python第三方库之numpy基础
前言 numpy是python的科学计算模块,底层实现用c代码,运算效率很高.numpy的核心是矩阵narray运算. narray介绍 矩阵拥有的属性 ndim属性:维度个数 shape属性:维度大 ...
- 关于linux系统如何实现fork的研究(二)【转】
转自:http://www.aichengxu.com/linux/7166015.htm 本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 前一篇关于li ...
- python中的pydoc
在终端上输入pydoc会显示以下信息 pydoc - the Python documentation tool pydoc <name> ... Show text documentat ...
- Spring如何解析Dubbo标签
1. 要了解Dubbo是如何解析标签的,首先要清楚一点就是Spring如何处理自定义标签的,因为Dubbo的标签可以算是Spring自定义标签的一种情况: 2. Spring通过两个接口来解析自定义的 ...
- poj 2420(模拟退火)
A Star not a Tree? Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6066 Accepted: 285 ...
- OPENSSL问题,使用fsockopen()函数提示错误
环境配置 系统环境 CentOS7.2WDCP v3.2.2 lanmp PHP 多版本 指定使用5.6 OpenSSL 1.0.2h 3 May 2016 php.ini相关设置allow_url ...
- angular.js 验证码注册登录
css部分 header{ height: 50px; line-height: 50px; display: flex; } .callback{ text-align: left; display ...