几乎是3的个人空间java正文
Java 8流多字段排序
xiaomin0322 xiaomin0322是2019/11/02 11:38字数1012读书200集合3点赞0备注0
Java
注:转载请注明出处!
大多数情况下,用sql难以解决的多表查询、临时表的分组和排序尽量用java8的新功能stream处理
使用java8的新功能,首先要了解基础的
列表类列表; 代表某个集合
//返回对象的集合按照类属性的升序排序
list.stream ().sorted (comparator.com paring ) )类:属性1 ) );
//返回对象集合按照降序对类属性进行排序,注意两种写法
list.stream ().sorted (comparator.com paring ) )类:属性1 ).reversed ); //先按升序排列属性,最后按降序排列属性
list.stream((.sorted ) comparator.comparing ) )类:属性一,Comparator.reverseOrder ) ); //按属性降序
//返回的对象集合按类属性升序属性升序排列
list.stream ().sorted ) comparator.comparing )类33603360属性1 ).thenComparing )类:3360属性2 );
//返回对象集合中,类属性按降序属性按2升的顺序注意2种写法
list.stream ().sorted ) comparator.comparing )类33603360属性1 ).reversed ) ).thenComparing )类3360:属性2 ); //首先按升序排列属性,按升序排列结果,按降序排列属性,按升序排列属性
list.stream((.sorted ) comparator.comparing )类33603360属性一,Comparator.reverseOrder ) ).thenComparing )
//返回对象集合按照类属性一降序属性二降序注意两种写法
list.stream ().sorted(comparator.comparing )类3360:属性1 ).reversed ).thenComparing )类3360:属性//先按升序排列属性,按升序排列结果,按降序排列属性,按降序排列属性
list.stream((.sorted ) comparator.comparing )类33603360属性一,Comparator.reverseOrder ) ).thenComparing )
//返回对象集合中,类属性按升序属性按降序排列,属性按降序排列,注意两种写法
list.stream((.sorted ) comparator.comparing )类3360:属性1 ).reversed ) ).thenComparing )类3360:属性2 )
list.stream ().sorted comparator.com paring )类33603360属性1 ).thenComparing )类33603360属性2,comparator.reverseors //先按升序排列属性,再按降序排列属性
从以上例子可以看出
Comparator.comparing (类:属性1 ).reversed );
Comparator.comparing (类:属性一,Comparator.reverseOrder ) );
两种排序完全不同。 请务必加以区分。 1得到排序的结果后再排序。 2照原样重新排列。 很多人混淆后理解错误。 2更容易理解,建议使用2
实际例子:
现有类test具有两个属性:state状态time时间,需要按状态顺序和时间顺序进行逆序
class test { (
//状态private int state; //时间private Date time; publictest(intstate,Date time ) { this.state=state; this.time=time; }public int getState () { return state; }publicvoidsetstate(intstate ) { this.state=state; }公共数据获取时间() { return time; }公共void settime (datetime ) { this.time=time; }@Overridepublic String toString () return'test ) ' state='state ',time='dateutils.formatdateymd ) }
class testRun {
publicstaticvoidmain (string [ ] args ) { Listtest testList=new ArrayList ); Date d=DateUtils.now (; for(intI=1; i=3; I ) testt=newtest(I,DateUtils.addDays(d ) d,I ); testlist.add(t; }for(intI=1; i=3; I ) testt=newtest(I,DateUtils.addMonths(d ) d,I ); testlist.add(t; } test list.foreach (o-{ system.out.println ) o.tostring (); ); listtest sort=test list.stream (.sorted ) comparator.com paring (test 33603360 getstate ).thencomparing ) test 33603360360 sysysyston 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
转载自正文: https://www.cn blogs.com/Kuang long blogs/p/11230250.html