日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Java中的排序问题(Java8新特性 stream流、stream多字段排序)

發布時間:2023/12/29 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 Java中的排序问题(Java8新特性 stream流、stream多字段排序) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、概要

Java 8 API添加了一個新的抽象成為流Stream,它以一種聲明的方式處理數據,最后由最終操作得到前面處理的結果。

Stream專注于集合對象的操作,將要處理的元素集合看作一種流, 流在管道中傳輸, 并且可以在管道的節點上進行處理, 比如篩選, 排序,聚合等。

Stream在處理大批量數據操作中更加高效。

Stream + Lambda 表達式可以極大提高Java程序員的生產力,讓程序員寫出高效率、干凈、簡潔的代碼。

  stream的三大特性:1、不存儲數據;2、不改變源數據;3、延時執行。

  stream優點:1、簡化代碼;2、使用并行流可以利用多核特性,提升效率。

  stream上的所有操作分為兩類:中間操作和結束操作,中間操作只是一種標記,只有結束操作才會觸發實際計算。

2、什么是流

Stream不是集合元素,它不是數據結構并不保存數據,它是有關算法和計算的,它更像一個高級版本的Iterator。原始版本的Iterator,用戶只能顯式地一個一個遍歷元素并對其執行某些操作;高級版本的Stream,用戶只要給出需要對其包含的元素執行什么操作,比如,“過濾掉長度大于 10 的字符串”、“獲取每個字符串的首字母”等,Stream會隱式地在內部進行遍歷,做出相應的數據轉換。Stream就如同一個迭代器(Iterator),單向,不可往復,數據只能遍歷一次,遍歷過一次后即用盡了,就好比流水從面前流過,一去不復返。

而和迭代器又不同的是,Stream可以并行化操作,迭代器只能命令式地、串行化操作。顧名思義,當使用串行方式去遍歷時,每個item讀完后再讀下一個item。而使用并行去遍歷時,數據會被分成多個段,其中每個段在不同的線程中處理,然后將結果一起輸出。Stream的并行操作依賴于Java7中引入的Fork/Join框架(JSR166y)來拆分任務和加速處理過程。

Stream 的另外一大特點是,數據源本身可以是無限的。

工作中,經常會需要對集合內的元素進行排序。利用Java8可以很方便的對List內的元素進行排序操作;而在很多情況下sql不好

解決的多表查詢,臨時表分組,排序,盡量用java8新特性stream進行處理。

List 倒序排列

List<Double> salesData = new ArrayList<>();

Collections.reverse(salesData);

java8 stream多字段排序

List<類> rankList = new ArrayList<>(); 代表某個集合
 
//返回 對象集合以類屬性一升序排序
 
rankList.stream().sorted(Comparator.comparing(類::屬性一));
 
//返回 對象集合以類屬性一降序排序 注意兩種寫法
 
rankList.stream().sorted(Comparator.comparing(類::屬性一).reversed()); //先以屬性一升序,然后對結果集進行屬性一降序
 
rankList.stream().sorted(Comparator.comparing(類::屬性一, Comparator.reverseOrder())); //以屬性一降序
 
//返回 對象集合以類屬性一升序 屬性二升序
 
rankList.stream().sorted(Comparator.comparing(類::屬性一).thenComparing(類::屬性二));
 
//返回 對象集合以類屬性一降序 屬性二升序 注意兩種寫法
 
rankList.stream().sorted(Comparator.comparing(類::屬性一).reversed().thenComparing(類::屬性二));//先以屬性一升序,升序結果進行屬性一降序,再進行屬性二升序
 
rankList.stream().sorted(Comparator.comparing(類::屬性一,Comparator.reverseOrder()).thenComparing(類::屬性二));//先以屬性一降序,再進行屬性二升序
 
//返回 對象集合以類屬性一降序 屬性二降序 注意兩種寫法
 
rankList.stream().sorted(Comparator.comparing(類::屬性一).reversed().thenComparing(類::屬性二,Comparator.reverseOrder()));//先以屬性一升序,升序結果進行屬性一降序,再進行屬性二降序
 
rankList.stream().sorted(Comparator.comparing(類::屬性一,Comparator.reverseOrder()).thenComparing(類::屬性二,Comparator.reverseOrder()));//先以屬性一降序,再進行屬性二降序
 
//返回 對象集合以類屬性一升序 屬性二降序 注意兩種寫法
 
rankList.stream().sorted(Comparator.comparing(類::屬性一).reversed().thenComparing(類::屬性二).reversed());//先以屬性一升序,升序結果進行屬性一降序,再進行屬性二升序,結果進行屬性一降序屬性二降序
 
rankList.stream().sorted(Comparator.comparing(類::屬性一).thenComparing(類::屬性二,Comparator.reverseOrder()));//先以屬性一升序,再進行屬性二降序

注意兩種寫法

1、 Comparator.comparing(類::屬性一).reversed();

2、 Comparator.comparing(類::屬性一,Comparator.reverseOrder());

兩種排序是完全不一樣的,一定要區分開來:方式1是得到排序結果后再排序,方式2是直接進行排序!!!方式2更好理解。

其他同類知識點:

1、Java8中的Stream()與ParallelStream()的區別;

2、Java集合Stream類filter的使用

總結

以上是生活随笔為你收集整理的Java中的排序问题(Java8新特性 stream流、stream多字段排序)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。