java8 使用stream进行排序(多字段排序、升序、降序)
文章包含“标题”、“发布时间”、“是否推荐”、“是否置顶”四个属性。
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Article {/*** 文章标题*/private String title;/*** 发布时间*/private String releaseTime;/*** 是否推荐:Y 推荐;N 不推荐*/private String recommend;/*** 是否置顶: Y 置顶;N 不置顶*/private String top;
}
测试代码
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;public class Demo {public static void main(String[] args) {List<Article> list = init();sort(list);sort2(list);}/*** 初始化数据* @return*/private static List<Article> init(){List<Article> list = new ArrayList<>();list.add(new Article("文章一","2021-11-01","Y","Y"));list.add(new Article("文章二","2021-11-02","Y","Y"));list.add(new Article("文章三","2021-11-01","Y","N"));list.add(new Article("文章一","2021-11-02","Y","N"));list.add(new Article("文章一","2021-11-01","N","Y"));list.add(new Article("文章一","2021-11-02","N","Y"));list.add(new Article("文章一","2021-11-01","N","N"));list.add(new Article("文章一","2021-11-02","N","N"));return list;}....
}
排序方法
/*** 按照推荐、置顶、发布时间来排序* @param list*/
private static void sort(List<Article> list){List<Article> sortList = list.stream()// 【X】.sorted(Comparator.comparing(Article::getRecommend,Comparator.reverseOrder())// 【Y】.thenComparing(Article::getTop,Comparator.reverseOrder())// 【Z】.thenComparing(Article::getReleaseTime,Comparator.reverseOrder())).collect(Collectors.toList());sortList.stream().forEach(System.out::println);
}
// 运行结果:
// Article(title=文章二, releaseTime=2021-11-02, recommend=Y, top=Y)
// Article(title=文章一, releaseTime=2021-11-01, recommend=Y, top=Y)
// Article(title=文章一, releaseTime=2021-11-02, recommend=Y, top=N)
// Article(title=文章三, releaseTime=2021-11-01, recommend=Y, top=N)
// Article(title=文章一, releaseTime=2021-11-02, recommend=N, top=Y)
// Article(title=文章一, releaseTime=2021-11-01, recommend=N, top=Y)
// Article(title=文章一, releaseTime=2021-11-02, recommend=N, top=N)
// Article(title=文章一, releaseTime=2021-11-01, recommend=N, top=N)
【X】:优先使用recommend字段排序,并且使用降序排列(Comparator.reverseOrder()),在结果中的体现是前四篇文章的recommend为‘Y’,后四篇的recommend为‘N’
【Y】:之后再使用top字段排序,并且使用降序排列(Comparator.reverseOrder()), 在结果中的体现是recommend相同的文章中,前两篇文章的top为‘Y’, 后两篇文章的top为‘N’
【Z】:最后使用发布时间字段进行排序,并且使用降序排列(Comparator.reverseOrder())
两种倒序方式
Comparator.comparing(类::属性,Comparator.reverseOrder())
/*** 按照推荐、置顶、发布时间来排序* @param list*/
private static void sort(List<Article> list){List<Article> sortList = list.stream()// 【X】.sorted(Comparator.comparing(Article::getRecommend,Comparator.reverseOrder())// 【Y】.thenComparing(Article::getTop,Comparator.reverseOrder())// 【Z】.thenComparing(Article::getReleaseTime,Comparator.reverseOrder())).collect(Collectors.toList());sortList.stream().forEach(System.out::println);
}
// 运行结果:
// Article(title=文章二, releaseTime=2021-11-02, recommend=Y, top=Y)
// Article(title=文章一, releaseTime=2021-11-01, recommend=Y, top=Y)
// Article(title=文章一, releaseTime=2021-11-02, recommend=Y, top=N)
// Article(title=文章三, releaseTime=2021-11-01, recommend=Y, top=N)
// Article(title=文章一, releaseTime=2021-11-02, recommend=N, top=Y)
// Article(title=文章一, releaseTime=2021-11-01, recommend=N, top=Y)
// Article(title=文章一, releaseTime=2021-11-02, recommend=N, top=N)
// Article(title=文章一, releaseTime=2021-11-01, recommend=N, top=N)
以传入的字段进行倒序排列
【X】:这里就类似于mysql中的 order by recommend desc
【Y】:结合【X】就是order by recommend desc, top desc
Comparator.comparing(Article::getRecommend,Comparator.reverseOrder()).reversed()
private static void sort2(List<Article> list){List<Article> sortList = list.stream().sorted(Comparator.comparing(Article::getRecommend,Comparator.reverseOrder()).thenComparing(Article::getTop,Comparator.reverseOrder()).thenComparing(Article::getReleaseTime,Comparator.reverseOrder()).reversed()) // 【X】.collect(Collectors.toList());sortList.stream().forEach(System.out::println);
}
// 运行结果:
// Article(title=文章一, releaseTime=2021-11-01, recommend=N, top=N)
// Article(title=文章一, releaseTime=2021-11-02, recommend=N, top=N)
// Article(title=文章一, releaseTime=2021-11-01, recommend=N, top=Y)
// Article(title=文章一, releaseTime=2021-11-02, recommend=N, top=Y)
// Article(title=文章三, releaseTime=2021-11-01, recommend=Y, top=N)
// Article(title=文章一, releaseTime=2021-11-02, recommend=Y, top=N)
// Article(title=文章一, releaseTime=2021-11-01, recommend=Y, top=Y)
// Article(title=文章二, releaseTime=2021-11-02, recommend=Y, top=Y)
- 【X】:这里的reversed()是将之前的排序进行整个倒序,可以发现这个方法的运行结果和上一个运行方法的运行结果是完全相反的
java8 使用stream进行排序(多字段排序、升序、降序)相关推荐
- PHP中 如何将二位数组按某一个或多个字段值(升序/降序)排序?数字索引被重置,关联索引保持不变...
如何将二位数组按某一个或多个字段值(升序/降序)排序?数字索引被重置,关联索引保持不变 1.$arr=array( 2. array('id'=>1,'name'=>'will','age ...
- pandas中对列进行排序(单列/多列)/(升序/降序)/(多列升序,降序控制)
前言 我想把数据分析刻进DNA里 如下面的数据,对price,要进行最简单的升序操作: 这个好整: import pandas as pdshop = pd.read_csv("data/s ...
- html table表头升序 降序,jquery实现表格根据字段进行升序降序
例子: 蚂蚁部落 * { margin: 0; padding: 0; } body { padding: 100px; } .select { position: relative; display ...
- MySQL中的升序降序以及字段的升序降序
MySQL中 升序为asc 降序为desc 例如: 升序:select * from 表名 order by 表中的字段 asc(MySQL中默认是升序排列,可不写) : 降序:select ...
- 经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】
经典十大排序算法[Java版完整代码] 写在前面的话 十大排序算法对比 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 插入排序 希尔排序 计数排序 桶排序 基数排序 完整测试类 写在前面的话 ...
- 二位数组按某一个或多个字段值(升序/降序)排序
输出结果: 转载于:https://www.cnblogs.com/573583868wuy/p/5229307.html
- SQL语句 基础排序 单列排序 多列排序 升序降序 基础操作符 where语句 between 高级操作符 AND操作符 OR操作符 IN 和 NOT IN 优先级 Like操作符 模糊匹配 %
基础排序: 单列排序: 前面我们学习了数据的查询,查询出来的数据没有特定的顺序,要将查询出来的数据排序,我们可是使用ORDER BY语句: 例如我们将年龄按照升序排列: select age from ...
- python中升序降序问题_飘逸的python - 有的升序有的降序的情况下怎么多条件排序...
之前在统计导出各区服玩家消费的时候需要进行升序降序混搭的多条件排序. 需求是这样的.区服从小到大排,如果区服相同,则按消费从大到小排. 实现方法是利用python的sort算法是稳定排序,对数据进行多 ...
- C# List.sort排序详解(多权重,升序降序)
很多人可能喜欢Linq的orderBy排序,可惜U3D里面linq在Ios上会报错,所以就必须使用list的排序. 其实理解了并不难 升序降序比较 sort有三种结果 1,-1,0分别是大,小,相等. ...
- Java的Comparator排序(升序降序)理解
Java的Comparator排序(升序降序)理解 int compare(T o1, T o2); 这里o1表示位于前面的对象,o2表示后面的对象 返回-1(或负数),表示不需要交换01和02的位置 ...
最新文章
- 浏览器和服务器 对http请求(post get) url长度限制
- linux文件系统简介
- linux常用的makefile模版编写
- 关于MySQL出现锁等待lock wait timeout exceeded; try restarting transaction 的解决方案
- C++设计模式--模板方法模式
- vue-cli起的webpack项目 用localhost可以访问,但是切换到ip就不可以访问
- java.net.url 中文乱码_jsp get Url请求方式中文乱码问题解决办法
- JavaScript | 将十进制转换为十六进制,反之亦然
- ubuntun安装扫描仪
- B. Disturbed People(模拟) Codeforces Round #521 (Div. 3)
- 徒手撸了一个 API 网关,理解更透彻了,代码已上传github,自取~
- 《中国化工贸易》征稿函
- 【学术前沿分析】1 论文数据统计
- 使用Altium Designer 18绘制stm32最小系统的电路原理图
- Save coredump
- 2019年英语专升本英语阅读「Part II 阅读专区」【文章(图片)、答案、词汇记忆】
- 消防系统设计市场现状及未来发展趋势
- Android中怎么重新启动APP或系统
- matlab微波S21参数代码,S参数的含义
- 学习Python爬虫分布式:蜘蛛侠版爬虫架构