最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的流式編程問題

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

注意:這個(gè)特效是在Java8之后才引進(jìn)的  就是說 jdk8之前是沒有的

一. 基本概念

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

JDK8 的Stream 是一個(gè)受到 函數(shù)式編程 和 多核時(shí)代影響而產(chǎn)生的東西。很多時(shí)候我們需要到底層返回?cái)?shù)據(jù),上層再對(duì)數(shù)據(jù)進(jìn)行遍歷,進(jìn)行一些數(shù)據(jù)統(tǒng)計(jì),但是之前的Java API 中很少有這種方法,這就需要我們自己來 Iterator 來遍歷,如果JDK 能夠?yàn)槲覀兲峁┮恍┻@種方法,并且能夠?yàn)槲覀儍?yōu)化就好了。

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

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

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

1.2 什么是流

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

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

二. 串行流和并行流

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

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

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

三. 中間操作和最終操作

中間操作:

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

最終操作:

  • forEach():遍歷每個(gè)元素。
  • reduce():把Stream 元素組合起來。例如,字符串拼接,數(shù)值的 sum,min,max ,average 都是特殊的 reduce。
  • collect():返回一個(gè)新的集合。
  • 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("----對(duì)集合數(shù)據(jù)的過濾,根據(jù)給到的條件篩選過濾----");
   list.stream().filter(param -> !param.contains("a")).forEach(System.out::println);

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


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


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



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


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

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

總結(jié)

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

相關(guān)文章

  • idea突然報(bào)錯(cuò)Malformed \uxxxx encoding問題及解決

    idea突然報(bào)錯(cuò)Malformed \uxxxx encoding問題及解決

    Maven項(xiàng)目在切換Git分支時(shí)報(bào)錯(cuò),提示<project>元素為描述符根元素,解決方法:刪除Maven倉庫中的resolver-status.properties文件(建議先備份),清除緩存并重啟IDEA,問題得以解決
    2025-09-09
  • JavaSE文件操作工具類FileUtil詳解

    JavaSE文件操作工具類FileUtil詳解

    這篇文章主要為大家詳細(xì)介紹了JavaSE系列之文件操作工具類FileUtil,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java創(chuàng)建ZIP壓縮文件的方法

    Java創(chuàng)建ZIP壓縮文件的方法

    這篇文章主要介紹了Java創(chuàng)建ZIP壓縮文件的方法,實(shí)例分析了java創(chuàng)建zip文件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Java結(jié)構(gòu)型設(shè)計(jì)模式之享元模式示例詳解

    Java結(jié)構(gòu)型設(shè)計(jì)模式之享元模式示例詳解

    享元模式(FlyWeight?Pattern),也叫蠅量模式,運(yùn)用共享技術(shù),有效的支持大量細(xì)粒度的對(duì)象,享元模式就是池技術(shù)的重要實(shí)現(xiàn)方式。本文將通過示例詳細(xì)講解享元模式,感興趣的可以了解一下
    2022-09-09
  • 詳解spring自動(dòng)掃描包

    詳解spring自動(dòng)掃描包

    這篇文章主要介紹了spring自動(dòng)掃描包的相關(guān)知識(shí),本文通過實(shí)例相結(jié)合的形式給大家介紹的非常詳細(xì),感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-06-06
  • Java中輸入輸出方式詳細(xì)講解

    Java中輸入輸出方式詳細(xì)講解

    這篇文章主要給大家介紹了關(guān)于Java中輸入輸出方式的相關(guān)資料,Java輸入輸出是指使用java提供的一些類和方法來實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • Java有效處理異常的三個(gè)原則

    Java有效處理異常的三個(gè)原則

    Java中異常提供了一種識(shí)別及響應(yīng)錯(cuò)誤情況的一致性機(jī)制,有效地異常處理能使程序更加健壯、易于調(diào)試。那么這篇文章總結(jié)了Java有效處理異常的三個(gè)原則,有需要的朋友們可以參考借鑒。
    2016-09-09
  • SSH框架網(wǎng)上商城項(xiàng)目第27戰(zhàn)之申請(qǐng)域名空間和項(xiàng)目部署及發(fā)布

    SSH框架網(wǎng)上商城項(xiàng)目第27戰(zhàn)之申請(qǐng)域名空間和項(xiàng)目部署及發(fā)布

    這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項(xiàng)目第26戰(zhàn)之申請(qǐng)域名空間和項(xiàng)目部署及發(fā)布,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java實(shí)現(xiàn)按行分割大文件

    Java實(shí)現(xiàn)按行分割大文件

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)按行分割大文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 使用springboot 打包插件去除jar包瘦身

    使用springboot 打包插件去除jar包瘦身

    這篇文章主要介紹了使用springboot 打包插件去除jar包瘦身的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

灌阳县| 托克托县| 玉林市| 五指山市| 上高县| 高唐县| 门源| 万盛区| 屏山县| 宝清县| 富川| 平塘县| 瑞安市| 花莲市| 常州市| 日土县| 孝义市| 娄底市| 犍为县| 芒康县| 治多县| 金秀| 蒙阴县| 尉犁县| 肃宁县| 丹寨县| 云南省| 宁强县| 准格尔旗| 林口县| 淮安市| 如皋市| 扎鲁特旗| 乾安县| 乌拉特后旗| 基隆市| 毕节市| 沅陵县| 金平| 大名县| 新巴尔虎左旗|