昨天写《mysql进行查询时可以用limit限制查询结果的条数,Java可以吗?》和大家约定好了,今天要写一写怎么对流做类似order by的操作。
既然说到,那就要做到。
今天就来写一写Java8中怎么对流做类似sql中order by的操作。
俗话说:“一事不烦二主”,还是写流相关的内容,那就还麻烦之前的类和数据登场演绎一番了。
前面对流做类似sql查询的group by功能用的是groupingBy方法,对流做类似sql查询limit功能用的是limit方法。那这里要对流做类似sql查询的order by操作是否也有类似叫orderBy之类的方法呢。
这里就没有类似orderBy这样的方法了,而是如上图的sorted方法。
我们先来试试没有参数的。
执行一下,看看会有什么效果。
抛出了无法转型的异常,Student无法转型为Comparable。为什么会这样呢,因为这里使用无参的sorted方法就需要要排序的对象本身是可排序的,也就是实现了Comparable接口的。
那我们将Student类实现一下Comparable接口。
再来执行一下刚才的sorted功能试试吧。
可以了,实现了按照age进行排序的目的。
下面再来看看有参数的sorted是如何使用的。
其实就是将比较的逻辑写在了sorted方法中。
这次我把比较的顺序改了一下,刚才是升序,相当于sql的的asc,这次是降序,相当于sql中的desc。
执行一下,看看效果吧。
昨天的文章写对流做limit操作时有说到,sql中一般做limit操作时都是先要做order by。
那再来看看对流怎么做类似order by的操作之后进行limit操作吧。
如上图代码所示,其实就是对前面的代码中sorted之后调用一下limit方法就行了。
看看执行结果吧。
目的达到了。