失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java8 使用stream进行排序(多字段排序 升序 降序)

java8 使用stream进行排序(多字段排序 升序 降序)

时间:2019-05-07 17:54:01

相关推荐

java8 使用stream进行排序(多字段排序 升序 降序)

文章包含“标题”、“发布时间”、“是否推荐”、“是否置顶”四个属性。

import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructorpublic class Article {/*** 文章标题*/private String title;/*** 发布时间*/private String releaseTime;/*** 是否推荐:Y 推荐;N 不推荐*/private String recommend;/*** 是否置顶: Y 置顶;N 不置顶*/private String top;}

测试代码

import java.util.ArrayList;import parator;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("文章一","-11-01","Y","Y"));list.add(new Article("文章二","-11-02","Y","Y"));list.add(new Article("文章三","-11-01","Y","N"));list.add(new Article("文章一","-11-02","Y","N"));list.add(new Article("文章一","-11-01","N","Y"));list.add(new Article("文章一","-11-02","N","Y"));list.add(new Article("文章一","-11-01","N","N"));list.add(new Article("文章一","-11-02","N","N"));return list;}....}

排序方法

/*** 按照推荐、置顶、发布时间来排序* @param list*/private static void sort(List<Article> list){List<Article> sortList = list.stream()// 【X】.sorted(paring(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=-11-02, recommend=Y, top=Y)// Article(title=文章一, releaseTime=-11-01, recommend=Y, top=Y)// Article(title=文章一, releaseTime=-11-02, recommend=Y, top=N)// Article(title=文章三, releaseTime=-11-01, recommend=Y, top=N)// Article(title=文章一, releaseTime=-11-02, recommend=N, top=Y)// Article(title=文章一, releaseTime=-11-01, recommend=N, top=Y)// Article(title=文章一, releaseTime=-11-02, recommend=N, top=N)// Article(title=文章一, releaseTime=-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())

两种倒序方式

paring(类::属性,Comparator.reverseOrder())

/*** 按照推荐、置顶、发布时间来排序* @param list*/private static void sort(List<Article> list){List<Article> sortList = list.stream()// 【X】.sorted(paring(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=-11-02, recommend=Y, top=Y)// Article(title=文章一, releaseTime=-11-01, recommend=Y, top=Y)// Article(title=文章一, releaseTime=-11-02, recommend=Y, top=N)// Article(title=文章三, releaseTime=-11-01, recommend=Y, top=N)// Article(title=文章一, releaseTime=-11-02, recommend=N, top=Y)// Article(title=文章一, releaseTime=-11-01, recommend=N, top=Y)// Article(title=文章一, releaseTime=-11-02, recommend=N, top=N)// Article(title=文章一, releaseTime=-11-01, recommend=N, top=N)

以传入的字段进行倒序排列

【X】:这里就类似于mysql中的 order by recommend desc

【Y】:结合【X】就是order by recommend desc, top desc

paring(Article::getRecommend,Comparator.reverseOrder()).reversed()

private static void sort2(List<Article> list){List<Article> sortList = list.stream().sorted(paring(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=-11-01, recommend=N, top=N)// Article(title=文章一, releaseTime=-11-02, recommend=N, top=N)// Article(title=文章一, releaseTime=-11-01, recommend=N, top=Y)// Article(title=文章一, releaseTime=-11-02, recommend=N, top=Y)// Article(title=文章三, releaseTime=-11-01, recommend=Y, top=N)// Article(title=文章一, releaseTime=-11-02, recommend=Y, top=N)// Article(title=文章一, releaseTime=-11-01, recommend=Y, top=Y)// Article(title=文章二, releaseTime=-11-02, recommend=Y, top=Y)

【X】:这里的reversed()是将之前的排序进行整个倒序,可以发现这个方法的运行结果和上一个运行方法的运行结果是完全相反的

如果觉得《java8 使用stream进行排序(多字段排序 升序 降序)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。