在工作中遇到了需要按某一实体类多维度排序的场景。(Hbase备份Orcale字段 检索查询后order by操作)

  • 获取需要字段后封装进实体类,另外保存需要排序的字段。
public class SortEntity {private String entityString; //用于存放其余拼接字段private String compactor = null; // 第一个排序参数private String secondCompactor = null; // 第二个用于排序的参数private String thirdCompactor = null;//第三个排序参数public SortEntity() {}public SortEntity(String entityString, String compactor, String secondCompactor) {this.entityString=entityString;this.compactor=compactor;this.secondCompactor=secondCompactor;}public String getCompactor() {return compactor;}public void setCompactor(String compactor) {this.compactor = compactor;}public String getSecondCompactor() {return secondCompactor;}public void setSecondCompactor(String secondCompactor) {this.secondCompactor = secondCompactor;}public String getEntityString() {return entityString;}public void setEntityString(String entityString) {this.entityString = entityString;}public String getThirdCompactor() {return thirdCompactor;}public void setThirdCompactor(String thirdCompactor) {this.thirdCompactor = thirdCompactor;}@Overridepublic String toString() {return "SortEntity [entityString=" + entityString + ", compactor=" + compactor + ", secondCompactor=" + secondCompactor + ", thirdCompactor=" + thirdCompactor + "]";}}
  • 假设上述实体类就是需要的内容 利用jdk8 List Compactor进行排序:
/** * 功能:排序 * @param a * @param b* @param desc  是否降序* @return*/public static int compactor(String a,String b,boolean desc){if(desc)return -compactorS(a, b);elsereturn compactorS(a, b);}/*** * 功能:确保排序的如果是数字不可以带小数或者空格 否则就变为了字典顺序* @param a* @param b* @return*/public static int compactorS(String a,String b){if(StringUtils.isNumeric(a)){return  compactorInteger(Integer.parseInt(a),Integer.parseInt(b));}else{return a.compareTo(b);}}public static int compactorInteger(Integer a,Integer b){if(a>b)return 1;if(a<b)return -1;return 0;}public static void main(String[] args) {List<SortEntity> list = new ArrayList<>();list.add(new SortEntity("abc","3","5"));list.add(new SortEntity("abc","3","4"));list.add(new SortEntity("abc","4","3"));list.add(new SortEntity("abc","4","2"));list.add(new SortEntity("abc","4","3"));list.sort(Comparator.comparing(SortEntity::getCompactor,(f,s)->compactor(f, s,true)).thenComparing(SortEntity::getSecondCompactor,(f,s)-> compactor(f, s, true)));list.forEach(System.out::println);}

输出:

SortEntity [entityString=abc, compactor=4, secondCompactor=3, thirdCompactor=null]
SortEntity [entityString=abc, compactor=4, secondCompactor=3, thirdCompactor=null]
SortEntity [entityString=abc, compactor=4, secondCompactor=2, thirdCompactor=null]
SortEntity [entityString=abc, compactor=3, secondCompactor=5, thirdCompactor=null]
SortEntity [entityString=abc, compactor=3, secondCompactor=4, thirdCompactor=null]

关键代码解释:
list.sort(Comparator.comparing(SortEntity::getCompactor,(f,s)->compactor(f, s,true))
SortEntity::getCompactor,(f,s) f为当前SortEntity类getCompactor方法获取的值 s为下一个SortEntity类getCompactor方法获取的值, 之后使用compactor方法对比两个值。compactor返回结果为-1 f在s前面 ,为1 则f在s后面 。
多维则在后面增加thenComparing方法 即上述值为0时再执行。n维则添加n-1个thenComparing方法即可。

Java List 多维度排序 jdk8相关推荐

  1. 对List进行多维度排序

    在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标. 1 实体类 package domain;/*** Created by Johny on 2 ...

  2. [Java基础] sort方法--------排序的那些事

    引言 在学习Java过程中,排序sort是我们常用的功能:在Java里,数组有Arrays.sort()可以排序,集合则是Collections.sort()方法排序:默认情况下是升序排列,但是降序又 ...

  3. java中集合的排序

    java中集合的排序 import java.util.Set; import java.util.HashSet; import java.util.List; import java.util.A ...

  4. Java针对ArrayList自定义排序的2种实现方法

    这篇文章主要介绍了Java针对ArrayList自定义排序的2种实现方法,结合实例形式总结分析了Java操作ArrayList自定义排序的原理与相关实现技巧,下面就和动力节点java学院小编一起来看看 ...

  5. Java入门算法(排序篇)丨蓄力计划

    本专栏已参加蓄力计划,感谢读者支持 往期文章 一. Java入门算法(贪心篇)丨蓄力计划 二. Java入门算法(暴力篇)丨蓄力计划 三. Java入门算法(排序篇)丨蓄力计划 四. Java入门算法 ...

  6. JAVA四种基本排序总结

    JAVA四种基本排序,包括冒泡法,插入法,选择法,SHELL排序法.其中选择法是冒泡法的改进,SHELL排序法是 插入法的改进.所以从根本上来说可以归纳为两种不同的排序方法:即:插入法&冒泡法 ...

  7. java单词按字典排序_最终Java日志字典:开发人员最常记录的单词是什么?

    java单词按字典排序 最终的记录字典,或者:我们记录的最常见单词是什么? 日志文件是调试应用程序的最常用方法,当解决错误时,它们肯定可以引导我们朝正确的方向发展. 但是,大多数日志文件每天都会增加一 ...

  8. java集合根据值排序_Java 8:对集合中的值进行排序

    java集合根据值排序 意识到Java 8将在接下来的几周内发布其GA版本之后,我认为现在是时候来看看它了,在过去的一周里,我一直在阅读Venkat Subramaniam的书 . 我要讲的是第3章, ...

  9. java对数组进行排序_用Java对数组进行排序所需的最少交换

    java对数组进行排序 Problem: 问题: In this problem, we would have an unordered array with consecutive distinct ...

最新文章

  1. windows 10 的安装说明
  2. 高滤波器opencv(Python)
  3. 家用使用计算机组装,不能再简单了!家用电脑DIY组装实操
  4. axios 的简单使用
  5. 计算机五大逻辑部件数据流,211计算机基础知识综合篇.ppt
  6. oracle的tns错误,Oracle TNS-12514错误的解决步骤
  7. linux抓包及分析
  8. 科技文献检索与计算机应用试卷,科技文献检索试卷
  9. 各类w3school网站的区别小记
  10. 计算机如何调整对比度,电脑屏幕对比度怎么调
  11. cocos2dx报错OpenGL error 0x0501
  12. 互联网日报 | 2月3日 星期三 | 微信5000万份红包封面免费领;抖音回应“封杀腾讯”谣言;爱驰汽车入局网约车...
  13. JavaWeb查漏补缺
  14. 无纸化车间是怎样实现的,能给企业生产带来什么?
  15. 单源最短路径dijkstra算法
  16. java实现gif动画效果(java显示动态图片)
  17. C++实现高斯坐标的正反算
  18. 拼题A (PTA) 公共题集题解收录
  19. 两个空间(N维欧氏空间、Lebesgue空间)的Holder不等式
  20. SPSS统计作图教程:百分条图/堆积条图

热门文章

  1. 突破安全狗和360网站卫士
  2. 盛大创新院创新模式梳理
  3. 3分钟学会使用Elasticsearch跨集群复制功能(CCR)
  4. scandisk常用方法
  5. 电脑配置怎么看?这3种方法就可以轻松查看
  6. 无法启动此程序因为计算机中丢失d3dx,因计算机中丢失d3dx9-41.dl而无法启动程序的解决办法...
  7. Java使用Spire.Pdf实现PDF添加图片水印
  8. 日语基础复习 Day 13
  9. 420个生活小窍门,很有用的哦!
  10. 计算机类学生考试系统,学生在线考试系统.doc