java多字段排序,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) {
public Date getTime() {
return time;
public void setTime(Date 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);
}
test t = new test(i, DateUtils.addMonths(d, i));
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 -> {
运行结果:
排序前:
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}
------------------------------------
排序后:
Process finished with exit code 0
到此这篇关于java8 stream多字段排序的实现的文章就介绍到这了,更多相关java8 stream多字段排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
java多字段排序,java8 stream多字段排序的实现相关推荐
- stream流倒序排序_java8 stream多字段排序
注:转载请注明出处!!!!!!! 很多情况下sql不好解决的多表查询,临时表分组,排序,尽量用java8新特性stream进行处理 使用java8新特性,下面先来点基础的 List list; 代表某 ...
- Java8 Stream详解~排序:sorted
sorted,中间操作.有两种排序: sorted():自然排序,流中元素需实现Comparable接口 sorted(Comparator com):Comparator排序器自定义排序 「案例:将 ...
- Java stream().sorted()实现排序(升序、降序、多字段排序)
1 自然排序 sorted():自然排序,流中元素需实现Comparable接口 package com.entity;import lombok.*;@Data @ToString @AllArgs ...
- Java对List集合中的对象的某个中文字段按照拼音首字母进行排序
徐师兄这次开门见山上代码!由于没时间整理直接controller层写了一个测试代码 @RequestMapping(value = "/get", method = Request ...
- java map 值排序_使用Java8 Stream API对Map类型按照键或值进行排序
在这篇文章中,您将学习如何使用Java对Map按照键或值进行排序.前几日有位朋友面试遇到了这个问题,看似很简单的问题,但是如果不仔细研究一下也是很容易让人懵圈的面试题.所以我决定写这样一篇文章.在Ja ...
- Java8 Stream 流 多字段求和、汇聚
Stream 多字段求和.汇聚 实现方法 对象类型数据处理 Map类型数据处理 实现方法 利用Collectors.toMap(Function keyMapper, Function valueMa ...
- 利用Java流进行类的整型字段求和的例子
我有两个测试类: import java.util.Arrays; import java.util.List; import java.util.function.ToIntFunction; im ...
- java list 元素去重_小猿圈Java开发之list按照元素某个字段去重详解
小猿圈Java老师给大家分享一篇关于如何实现Java8中list按照元素的某个字段去重的详细介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们一起来看一下吧. ...
- Java基础学习总结(132)——Java8 Stream流操作学习总结
传统的数据处理都是用循环来解决,而不是像搜索数据库那样有具体的搜索语句,而Java8的Stream提供了很好的方案,往往一行就搞定了,而且Stream还可以链式操作,一行代码实现多个循环的功能,代码风 ...
最新文章
- Oracle下绝对文件号和相对文件号区别
- MySQL 高级 - 存储过程 - 语法 - 游标
- 2017年Spring发布了30个新的Android库,值得您关注
- 量化感知训练实践:实现精度无损的模型压缩和推理加速
- Flutter PageView 使用详细概述
- 测试博客园代码插入格式显示
- python分解word文档为多个_用python批量处理word文档
- IG击败TOP进入春季赛决赛 王思聪督战时吃玉米动作亮了
- 05DotNet基本常用类库
- hdu 4539 郑厂长系列故事——排兵布阵
- 开启smb协议_SMB协议(使用说明+过程详解+抓包分析)
- uploadify php 重命名,自定义uploadify服务器端上传脚本
- 二维码在线生成接口API
- python数码时钟代码_micro:bit 编程模拟时钟表盘
- 京东,想说爱你,并不容易!
- Python将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- Mac idea 导入maven 工程提示 Malformed \uxxxx encoding
- 什么是 Tableau?
- 威纶通设置记录历史事件例程
- 【数据压缩】调用VFW库对无压缩avi的解封装
热门文章
- 打开wmware没反应_没呼吸没脉搏,溺水女孩危在旦夕!预产期只差9天的她挺着大肚子出手相助...
- 少儿编程100讲轻松学python(六)-pycharm怎么汉化?
- 对后台返回的数据进行评分排序、时间排序!
- 宝塔常用的命令大全(直接上官网)
- 网络工程属于计算机哪一类,网络工程专业属于什么门类
- div中直接绑定富文本值
- angular 获取ng-repeat完成状态 $last
- 手机端调试console.log,直接引入一个js文件
- 16进制颜色识别和搭配规律
- HTML 中点击a标签,页面跳转执行过程