首页 > 编程知识 正文

comparator和comparable的区别,prim算法思想

时间:2023-05-04 19:32:15 阅读:151253 作者:509

几乎是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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。