stream流倒序排序_java8 stream多字段排序

注:转载请注明出处!!!!!!!

很多情况下sql不好解决的多表查询,临时表分组,排序,尽量用java8新特性stream进行处理

使用java8新特性,下面先来点基础的

List list; 代表某集合

//返回 对象集合以类属性一升序排序

list.stream().sorted(Comparator.comparing(类::属性一));

//返回 对象集合以类属性一降序排序 注意两种写法

list.stream().sorted(Comparator.comparing(类::属性一).reversed());//先以属性一升序,结果进行属性一降序

list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()));//以属性一降序

//返回 对象集合以类属性一升序 属性二升序

list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二));

//返回 对象集合以类属性一降序 属性二升序 注意两种写法

list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二));//先以属性一升序,升序结果进行属性一降序,再进行属性二升序

list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二));//先以属性一降序,再进行属性二升序

//返回 对象集合以类属性一降序 属性二降序 注意两种写法

list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一升序,升序结果进行属性一降序,再进行属性二降序

list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一降序,再进行属性二降序

//返回 对象集合以类属性一升序 属性二降序 注意两种写法

list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二).reversed());//先以属性一升序,升序结果进行属性一降序,再进行属性二升序,结果进行属性一降序属性二降序

list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一升序,再进行属性二降序

通过以上例子我们可以发现

1. Comparator.comparing(类::属性一).reversed();

2. Comparator.comparing(类::属性一,Comparator.reverseOrder());

两种排序是完全不一样的,一定要区分开来 1 是得到排序结果后再排序,2是直接进行排序,很多人会混淆导致理解出错,2更好理解,建议使用2

实际例子:

现有一个类test 有两个属性:state 状态 time 时间,需要状态顺序且时间倒序

class test {

//状态

private int state;

//时间

private Date time;

public test(int state, Date time) {

this.state = state;

this.time = time;

}

public int getState() {

return state;

}

public void setState(int state) {

this.state = state;

}

public Date getTime() {

return time;

}

public void setTime(Date time) {

this.time = time;

}

@Override

public String toString() {

return "test{" +

"state=" + state +

", time=" + DateUtils.formatDateYMD(time) +

'}';

}

}

class testRun {

public static void main(String[] args) {

List testList = new ArrayList<>();

Date d = DateUtils.now();

for (int i = 1; i <= 3; i++) {

test t = new test(i, DateUtils.addDays(d, i));

testList.add(t);

}

for (int i = 1; i <= 3; i++) {

test t = new test(i, DateUtils.addMonths(d, i));

testList.add(t);

}

testList.forEach(o -> {

System.out.println(o.toString());

});

List sort = testList.stream().sorted(Comparator.comparing(test::getState).thenComparing(test::getTime,Comparator.reverseOrder())).collect(toList());

System.out.println("------------------------------------");

sort.forEach(o -> {

System.out.println(o.toString());

});

}

}

运行结果:

排序前:

test{state=1, time=2019-07-24}

test{state=2, time=2019-07-25}

test{state=3, time=2019-07-26}

test{state=1, time=2019-08-23}

test{state=2, time=2019-09-23}

test{state=3, time=2019-10-23}

------------------------------------

排序后:

test{state=1, time=2019-08-23}

test{state=1, time=2019-07-24}

test{state=2, time=2019-09-23}

test{state=2, time=2019-07-25}

test{state=3, time=2019-10-23}

test{state=3, time=2019-07-26}

Process finished with exit code 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8张图理解Java

摘要&#xff1a; 一图胜千言&#xff0c;下面图解均来自Program Creek 网站的Java教程&#xff0c;目前它们拥有最多的票选。如果图解没有阐明问题&#xff0c;那么你可以借助它的标题来一窥究竟。8张图理解Java一图胜千言&#xff0c;下面图解均来自Program Creek 网站的Java…

云栖大会|十年阿里云存储进化史:今天最好的表现就是明天最低的要求

戳蓝字“CSDN云计算”关注我们哦&#xff01;科技创新的能力仍然是俘获市场用户的必要条件&#xff0c;而善于发现新需求的敏锐嗅觉以及直面挑战的魄力&#xff0c;更是巨头企业的绝杀武器。随着大数据、人工智能等新兴技术的发展&#xff0c;图像语音识别、智能机器人、自动驾…

他在阿里的逆袭,只因为想做个“锤子”

摘要&#xff1a; 我叫孟白&#xff0c;这是我在阿里的第五年。这五年&#xff0c;我从一个外包工程师&#xff0c;到同事眼中的“铁打的”技术专家。填过无数次坑&#xff0c;也无数次想过放弃。留在阿里&#xff0c;是因为同事一句无意间的玩笑&#xff1a;“你只能做钉子&am…

vb6 判断打印机是否有效_讲述3D打印机怎么用 初学者必看

许多朋友买来了3D打印机&#xff0c;但却不知道如何下手&#xff0c;其实&#xff0c;3D打印机远远没那么复杂。那么&#xff0c;今天就来简单说一下3D打印机怎么用?第一步&#xff1a;创建模型想要玩转3D打印&#xff0c;最重要也是必不可少的环节就是建模!现在可以绘制三维图…

Intellij Idea 离线安装插件

一、idea插件下载地址 http://plugins.jetbrains.com/ 二、下载插件 安装插件 1、下载插件&#xff1a; 2、安装插件&#xff1a; settings -> plugins -> install plugin from disk&#xff0c;然后重启IDEA即可。 <!-- https://mvnrepository.com/artifact/org…

android dialog自定义圆角,Android自定义Dialog实现通用圆角对话框

前言&#xff1a;圆角对话框在项目中用的越来越多&#xff0c;之前一篇文章有介绍过使用系统的AlertDialogCardView(Android中使用CardView实现圆角对话框)实现了圆角对话框的样式&#xff0c;今天介绍自定义Dialog实现通用的圆角对话框。效果图&#xff1a;1.继承自AlertDialo…

k8s通过yaml创建pod_Kubernetes根据yaml创建pod的时候8080访问被拒绝报错

本人首次学习关于Kubernetes的相关知识&#xff0c;根据Kubernetes的权威指南做了一个关于Kubernetes的一个小测试相关环境是&#xff1a;centos7 64位Kubernetes 1.5.2docker 1.13.1etcd 3.2.22etcd&#xff0c;Kubernetes&#xff0c;docker安装完毕&#xff0c;之后讲防…

Dubbo开源现状与未来规划

摘要&#xff1a; Dubbo 在过去一段时间疏于维护&#xff0c;去年阿里高调宣布重启 Dubbo 开源之后&#xff0c;社区里问的最多的问题是&#xff0c;这次开源与上次有什么一样&#xff0c;还有就是 Dubbo 和 Spring Boot、Spring Cloud 是什么关系&#xff1f;希望通过这次Dubb…

漫画:什么是囚徒困境?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 小灰责编 | 刘丹故事发生在小灰小时候......囚徒困境讲的是一件怎样的事情呢&#xff1f;话说某一天&#xff0c;警察抓到了嫌疑犯小A和小B&#xff0c;虽然明知道他们肯定是罪犯&#xff0c;却没有决定性的证据。于是警察想…

Dubbo Cloud Native 之路的实践与思考

摘要&#xff1a; Cloud Native 应用架构随着云技术的发展受到业界特别重视和关注&#xff0c;尤其是 CNCF&#xff08;Cloud Native Computing Foundation&#xff09;项目蓬勃发展之际。Dubbo 作为服务治理的标志性项目&#xff0c;自然紧跟业界的潮流&#xff0c;拥抱技术的…

android mtk 按键,Android 4.0 虚拟按键、手机模式、平板模式(转)

nullem;text-align:left">平台信息:内核&#xff1a;linux2.6/linux3.0系统&#xff1a;android/android4.0平台&#xff1a;S5PV310(samsungExynos4210/4412)作者&#xff1a;xubin341719(欢迎转载&#xff0c;请注明作者) 三星新拿回来来的BSP&#xff0c;编译后没…

y电容如何选型_干式试验变压器选型依据

湖北中试高测电气控股有限公司为您解答&#xff1a;干式试验变压器选型依据干式试验变压器是电力系统中常用的设备之一&#xff0c;适用于各种电气设备绝缘性能的现场检测。当前市面上的干式试验变压器品牌、种类众多&#xff0c;如何才能选购到最适合自己使用的产品呢&#xf…

eplan如何导入access_EPLAN如何助力汽车行业的智能制造转型?

本文从汽车行业智能制造建设需求出发&#xff0c;结合EPLAN服务全球汽车行业企业实现智能制造的最佳实践&#xff0c;介绍了EPLAN在汽车行业智能制造建设过程中所能提供的完整、成熟的电气设计解决方案。作者&#xff1a;Eplan 王阳 | 来源&#xff1a;e-works一、汽车行业快速…

全面讲解OpenStack技术知识

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 鲜枣课堂责编 | 刘丹对于大部分人来说&#xff0c;这是一个很陌生的词&#xff0c;不知道它到底是什么&#xff0c;从哪里来&#xff0c;有什么用&#xff0c;和自己的工作有什么关系。有人可能知道&#xff0c;它和现在非常…

Dubbo在互金行业的应用

摘要&#xff1a; 融之家技术团队从2015年截止到目前累计经历了4次演进&#xff08;单体应用、多实例部署、半微服务、微服务&#xff09;&#xff0c;让平台能更懂用户&#xff0c;更理解用户的需求&#xff0c;把合适的人匹配到合适的产品。前言本文章是根据潘志伟老师在上海…

os是android5.0,Funtouch OS 2.1曝光 完美改Android5.0

由于设计风格华丽&#xff0c;UI特色鲜明&#xff0c;vivo基于Android 5.0开发的Funtouch OS 2.1曝光后&#xff0c;一直备受用户关注。近日&#xff0c;vivo官方再次公布其设计细节&#xff0c;据Funtouch官方微博发布的系统截图显示&#xff0c;Funtouch OS 2.1全面升级了And…

哈工大理论力学第八版电子版_校史上的这些天(37)| 和你一起在“岁月”中读懂哈工大...

1954年5月26日中央高等教育部委托哈工大组织举办理论力学、机械原理、机械零件3门课程教学座谈会。1990年5月26至27日哈尔滨建筑工程学院召开第六次党员代表大会。大会选举王玉林、朱华、刘剑秋、沈世钊、吴满山、张云学、张树仁、荣大成、高廷臣为中共哈尔滨建筑工程学院第六届…

外星人bios按f2调风扇_刷完BIOS出现Reboot and select proper boot device的解决方法

今天给W650KK1模具的神舟K680E刷了D大的BIOS&#xff0c;出现了Reboot and select proper boot device or insert boot media in selected boot device and press a key&#xff0c;这种情况需要尝试按回车键&#xff0c;如果按下回车屏幕复读了Reboot and select proper boot …

fatal: remote origin already exists.报错已成功解决

在上传本地代码到github仓库时&#xff0c;出现下面这个问题&#xff1a; 解决办法&#xff1a; 先移除 git remote rm origin再次添加 git remote add origin https://github.com/jennaqin/jennaqin.github.io.git