欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的流式編程問題

 更新時間:2023年12月14日 08:49:13   作者:不喜歡吃貓的魚  
這篇文章主要介紹了Java中的流式編程問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

注意:這個特效是在Java8之后才引進的  就是說 jdk8之前是沒有的

一. 基本概念

1.1 為什么加入 集合的流式操作     

JDK8 的Stream 是一個受到 函數(shù)式編程 和 多核時代影響而產(chǎn)生的東西。很多時候我們需要到底層返回數(shù)據(jù),上層再對數(shù)據(jù)進行遍歷,進行一些數(shù)據(jù)統(tǒng)計,但是之前的Java API 中很少有這種方法,這就需要我們自己來 Iterator 來遍歷,如果JDK 能夠為我們提供一些這種方法,并且能夠為我們優(yōu)化就好了。

所以JDK8加入 了 java.util.stream包,實現(xiàn)了集合的流式操作,流式操作包括集合的過濾,排序,映射等功能。根據(jù)流的操作性,又可以分為 串行流 和 并行流。

根據(jù)操作返回的結(jié)果不同,流式操作又分為中間操作和最終操作。大大方便了我們對于集合的操作。

  • 最終操作:返回一特定類型的結(jié)果。
  • 中間操作:返回流本身。

1.2 什么是流

Stream 不是 集合元素,也不是數(shù)據(jù)結(jié)構(gòu),它相當(dāng)于一個 高級版本的 Iterator,不可以重復(fù)遍歷里面的數(shù)據(jù),像水一樣,流過了就一去不復(fù)返。

它和普通的 Iterator 不同的是,它可以并行遍歷,普通的 Iterator 只能是串行,在一個線程中執(zhí)行。  

二. 串行流和并行流

串行流操作在一個線程中依次完成。

并行流在多個線程中完成,主要利用了 JDK7 的 Fork/Join 框架來拆分任務(wù)和加速處理。

相比串行流,并行流可以很大程度提高程序的效率。  

三. 中間操作和最終操作

中間操作:

  • filter(): 對元素進行過濾
  • sorted():對元素排序
  • map():元素映射
  • distinct():去除重復(fù)的元素

最終操作:

  • forEach():遍歷每個元素。
  • reduce():把Stream 元素組合起來。例如,字符串拼接,數(shù)值的 sum,min,max ,average 都是特殊的 reduce。
  • collect():返回一個新的集合。
  • min():找到最小值。
  • max():找到最大值。

廢話不多說 直接上代碼:

public static void main(String[] args) {
   List<String> list = new ArrayList();
   list.add("a");
   list.add("b");
   list.add("c");
   list.add("d");
   list.add("d");
   list.add("d");
   list.add("d");
   list.add("d");
   list.add("d");
   list.add("e");
   list.add("f");
   list.add("aa");
   list.add("faaa");
   System.out.println("----對集合數(shù)據(jù)的過濾,根據(jù)給到的條件篩選過濾----");
   list.stream().filter(param -> !param.contains("a")).forEach(System.out::println);

   System.out.println("----對集合數(shù)據(jù)進行排序,默認(rèn)的是升序排列----");
   list.stream().sorted().forEach(System.out::println);


   System.out.println("----自定義排序方式----");//注:這里是通過 Stream<T> sorted(Comparator<? super T> comparator); 這個方法
   list.stream().sorted((p1,p2) -> p1.hashCode() <p2.hashCode() ? 1 : -1).forEach(System.out::println);


   System.out.println("----對于集合的每個元素可以按照規(guī)則變成相應(yīng)的元素,這里是把包含a的元素替換成了1,其他的不變----");
   list.stream().map(param -> param.contains("a") ? 1 : param).forEach(System.out ::println);



   System.out.println("----對于集合中重復(fù)的數(shù)據(jù)進行去重,把相同的數(shù)據(jù)去除,這里去除了d的重復(fù)元素----");
   list.stream().distinct().forEach(System.out ::println);


   System.out.println("----reduce是把集合里的數(shù)據(jù)組合起來,這里是把所有的元素組合成一個新的字符串----");
   System.out.println(list.stream().reduce((p1,p2) -> p1+p2).get());

   
   
   System.out.println("----collect是將原先的集合數(shù)據(jù)根據(jù)給定的條件篩選重新生成一個新的list集合返回----");
   list.stream().filter(p -> !p.contains("a")).collect(Collectors.toList()).forEach(System.out::println);
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java?I/O?(Input/Output)文件字節(jié)流舉例詳解

    Java?I/O?(Input/Output)文件字節(jié)流舉例詳解

    Java的輸入輸出流(IO)是用于與外部設(shè)備(如文件、網(wǎng)絡(luò)連接等)進行數(shù)據(jù)交互的機制,下面這篇文章主要給大家介紹了關(guān)于Java?I/O?(Input/Output)文件字節(jié)流的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • 淺談Android開發(fā)中項目的文件結(jié)構(gòu)及規(guī)范化部署建議

    淺談Android開發(fā)中項目的文件結(jié)構(gòu)及規(guī)范化部署建議

    這篇文章主要介紹了Android開發(fā)中項目的文件結(jié)構(gòu)及規(guī)范化部署建議,組織好代碼文件的結(jié)構(gòu)有利于維護團隊合作的效率,需要的朋友可以參考下
    2016-03-03
  • 23種設(shè)計模式(21)java享元模式

    23種設(shè)計模式(21)java享元模式

    這篇文章主要為大家詳細介紹了23種設(shè)計模式之java享元模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • java實現(xiàn)文件上傳到服務(wù)器

    java實現(xiàn)文件上傳到服務(wù)器

    這篇文章主要為大家詳細介紹了java實現(xiàn)文件上傳到服務(wù)器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • springboot項目test文件夾下帶main方法的類不能運行問題

    springboot項目test文件夾下帶main方法的類不能運行問題

    這篇文章主要介紹了springboot項目test文件夾下帶main方法的類不能運行問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Mybatis中的@Param及動態(tài)SQL詳解

    Mybatis中的@Param及動態(tài)SQL詳解

    這篇文章主要介紹了Mybatis中的@Param及動態(tài)SQL詳解,@Param是MyBatis所提供的作為Dao層的注解,作用是用于傳遞參數(shù),從而可以與SQL中的的字段名相對應(yīng),需要的朋友可以參考下
    2023-10-10
  • 詳解SpringMVC解決跨域的兩種方案

    詳解SpringMVC解決跨域的兩種方案

    本篇文章主要介紹了詳解SpringMVC解決跨域的兩種方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • JDK源碼之PriorityQueue解析

    JDK源碼之PriorityQueue解析

    這篇文章主要為大家詳細介紹了JDK源碼之PriorityQueue,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • java實現(xiàn)遞歸文件列表的方法

    java實現(xiàn)遞歸文件列表的方法

    這篇文章主要介紹了java實現(xiàn)遞歸文件列表的方法,實例分析了java采用遞歸算法遍歷文件的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • springboot業(yè)務(wù)功能實戰(zhàn)之告別輪詢websocket的集成使用

    springboot業(yè)務(wù)功能實戰(zhàn)之告別輪詢websocket的集成使用

    WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于springboot業(yè)務(wù)功能實戰(zhàn)之告別輪詢websocket的集成使用,需要的朋友可以參考下
    2022-10-10

最新評論