Java8中如何對流做類似sql的order by操作

2020-12-22 軟體開發領路人

昨天寫《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方法就行了。

看看執行結果吧。

目的達到了。

相關焦點

  • 日進一步第三天,SQL語句之order by
    每日進步的第二天,持續日更,做產品助理的斜槓青年數據分析之小白的第二條sql語句比如:order by name---根據姓名排序order by price---根據價格排序order by price name--先根據價格再根據名字進行排序(這種情況下只有價格相同的情況才會根據姓名進行排序)
  • ORM 框架 sqltoy-orm 4.12.2 發版
    jdk自帶log,大幅減小jar的大小3、增加三個單表查詢、修改、刪除方法,更加簡化單表操作,便於內部邏輯快捷處理/** * findEntity 模式,簡化sql編寫模式,面向接口服務層提供快捷數據查詢和處理 * 1、通過where指定條件 * 2、支持lock * 3、支持order by (order by 在接口服務
  • 極致查詢性能 sqltoy-orm-4.12.3 發版 - OSCHINA - 中文開源技術...
    更新內容1、修復批量操作默認autoCommit默認為false導致分布式事務錯誤
  • 比mybatis 強大優雅的 sqltoy-orm-4.11.6 發版了
    在目前有這麼多ORM框架的情況下,再搞一個開源框架的前提就是必須要比之前的好很多,而在中國如果不超過mybatis(plus)就根本沒有必要投入精力做這件事!因為大家知道開源就是在別人忙掙錢或者玩樂的時候而你卻在不計得失的奉獻!而我希望給大家奉獻一個真正有趣的有靈魂的框架!
  • 女朋友都能看懂的,SQL優化乾貨
    沒有包含前置列name欄位按照mysql最左匹配原則,不走索引9、隱式類型轉換select * from A where name=1name欄位類型為varchar,也就是字符串,而sql中用name=1來查詢,sql
  • 極致性能 sqltoy-orm-4.12.10 發版 - OSCHINA - 中文開源技術交流...
    根本上杜絕了sql注入問題 最科學的sql編寫方式* sqltoy的sql編寫(支持嵌套)select *from sqltoy_device_order_info t where #[t.ORDER_ID=:orderId] #[and t.ORGAN_ID
  • 巧用Java8中的Stream,讓集合操作飛起來!
    【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫作者:堅持就是勝利juejin.im/post/5d5e2616f265da03b638b28a簡介java8
  • 極致查詢性能 sqltoy-orm-4.12.6 發版 - OSCHINA - 中文開源技術...
    具有JPA模式的CRUD功能(即CRUD無需寫sql),無需寫Dao,sqltoy提供了SqlToyLazyDao,同時提供了quickvo從資料庫生成POJO。 根本上杜絕了sql注入問題 最科學的sql編寫方式* sqltoy的sql編寫(支持嵌套)select *from sqltoy_device_order_info t where #[
  • 極致性能 sqltoy-orm-4.12.9 發版 - OSCHINA - 中文開源技術交流...
    具有JPA模式的CRUD功能(即CRUD無需寫sql),無需寫Dao,sqltoy提供了SqlToyLazyDao,同時提供了quickvo從資料庫生成POJO。 根本上杜絕了sql注入問題 最科學的sql編寫方式* sqltoy的sql編寫(支持嵌套)select *from sqltoy_device_order_info t where #[
  • sqltoy-orm 4.13.12.1 發版,增加 DTO 和 POJO 互轉工具方法
    一路走來,我只是用我的努力將大家好的idea融合在sqltoy中,希望看到這篇文章的讀者能夠真正的了解sqltoy並幫助到你們! 請不要見xml就反,說實在的在2010年之前crud就已經是沒有sql和xml了(如果有興趣可以了解一下sqltoy的update跟其它ORM的異同,也可以了解一下sqltoy中什麼是updateFetch,相信會看到另類的思考),不提crud是默認大家已經跨越了crud已經面對複雜查詢問題(難道默認值設高了?)
  • 終於搞懂了java8的內存結構,再也不糾結方法區和常量池了
    java8內存結構介紹  java虛擬機在jdk8改變了許多,網絡上各種解釋都有,在查閱了官方文檔以及一下大佬的解釋以後,我來粗淺的介紹一下我理解的java8的內存結構。java8內存結構圖
  • sqltoy-orm-4.16.6 發版,直面項目過程中的痛點!
    您的痛點和訴求分析,我們將大多數人遇到的問題分成3個階段: 希望擁有jpa式的對象操作的簡潔舒暢,如:save(entity)\update\saveOrUpdate\saveAll\updateAll,loadById()等 希望簡單的查詢可以是對象鏈式操作模式
  • SQL基礎操作
    這一篇我們將繼續為C#數據操作的基礎填上一個空白-SQL語句。SQL(Structured Query Language,結構化查詢語言)是一種特定的程式語言,用於管理資料庫系統,操作數據甚至編寫一些程序。當然,一方面因為時間問題,一方面因為各大資料庫的區別(當然了,還有就是個人對SQL研究並不是那麼深)所以這一篇就從SQL的基本操作入手,帶領大家一起看看SQL的世界。
  • 使用mybatis-plus必須掌握的基本技能,自定義SQL和分頁查詢
    2 自定義SQLMybatis-plus自帶的條件構造器雖然很強大,在項目實戰的時候,各種複雜的應用場景,你肯定避免不了要寫稍微複雜一點的sql語句,又或者一些朋友習慣通過寫sql來操作數據,那麼小編來說說mybatis-puls是怎麼自定義sql語句。
  • 小心避坑:MySQL分頁時使用 limit+order by 會出現數據重複問題
    但是,當limit遇到order by的時候,可能會出現翻到第二頁的時候,竟然又出現了第一頁的記錄。但是事實就是,MySQL再order by和limit混用的時候,出現了排序的混亂情況。2、分析問題在MySQL 5.6的版本上,優化器在遇到order by limit語句的時候,做了一個優化,即 使用了priority queue。
  • BeetlSQL 3.1.0 發布,Spring Saga 事務支持
    本次發布增強了Saga在spring下的支持,使用kafka提供重試以及重試失敗後放入丟棄隊列裡Saga是用來在微服務中的長事務管理
  • 不懂就問:SQL 語句中 where 條件後 寫上1=1 是什麼意思
    本文轉載自【微信公眾號:五角錢的程式設計師,ID:xianglin965】經微信公眾號授權轉載,如需轉載與原文作者聯繫程式設計師在編程過程中,經常會在代碼中使用到「where 1=1」,這是為什麼呢?語法規範我們在寫代碼的過程中,為了保證語法規範的時候,也會使用到where 1=1。
  • 使用mybatis框架,完成增刪改查操作
    mybatis框架的繼續學習,安排如下:對昨天學習的內容做個小結,其中補充一個昨天忽視的問題。資料庫無外乎就是增刪改查,所以使用mybatis做一個完整的crud操作。而如何找到對應的sql語句並執行?就需要在參數中說明sql語句對應的id了。