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

Java關于JDK1.8新特性的Stream流

 更新時間:2021年09月03日 14:12:07   作者:碼農飛哥  
這篇文章主要介紹了版本薇JDK1.8 的Java中的Stream流,Stream流是一個來自數(shù)據(jù)源的元素隊列并支持聚合操作,感興趣的朋友可以參考下面文章內容

Java 的Stream流

一、定義

JDK1.8 中增加了Stream流,Stream流是一個來自數(shù)據(jù)源的元素隊列并支持聚合操作。元素是特定類型的對象,形成一個隊列,Java中的Stream并不會存儲元素,而是按需計算數(shù)據(jù)源是流的來源,可以使集合,數(shù)組,I/O channel,生成器generator等。聚合操作類似SQL語句一樣的操作,比如filter,map,reduce,matchsorted

二、操作的特征

  • 中間的操作都會返回流對象本身,這樣多個操作可以串聯(lián)成一個管道,如同流式風格
  • 內部迭代:以前對集合的遍歷是通過Iterator或者For-Each的方式,顯式的在集合外部進行迭代,這叫做外部迭代,而Stream流式內部迭代。

三、代碼示例

1、生成流

如下代碼的意思是,首先創(chuàng)建一個集合,然后過濾出所有不為空的元素,重新組成一個集合

 List<String> stringList = Arrays.asList("abc", "", "bc", "efg", "abcd", "");
        List<String> strings = stringList.stream().filter(string -> StringUtils.isNotBlank(string)).collect(Collectors.toList());
  System.out.println("*********過濾后的集合是"+strings);

2、forEach 迭代

 strings.forEach(System.out::println);

3、limit方法用于獲取指定數(shù)量的流

如下就是獲取一個長度為10的流。

 Random random = new Random();
        random.ints().limit(10).forEach(System.out::println);

4、map

map方法用于映射每個元素,以下代碼片段使用map輸出元素對應的平方數(shù)

vList<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5, 8, 9);
        //獲取對應的平方數(shù)
        List<Integer> integers = numbers.stream().map(i -> i * i).distinct().collect(Collectors.toList());
        System.out.println("*********獲取對應的平方數(shù)"+integers);

5、sorted

sorted方法用于對流進行排序
如下,就是按照元素的大小進行排序

        List<Integer> orgList = Arrays.asList(10, 9, 8, 7, 6, 13, 16, 0, 1, 2);
        List<Integer> sortedList = orgList.stream().sorted().collect(Collectors.toList());
        System.out.println("*********排序后集合是"+sortedList);

6、并行(parallel)程序

 List<String> emptyList = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "");
        //獲取空字符串的數(shù)量
        long count = emptyList.parallelStream().filter(string -> string.isEmpty()).count();
        System.out.println("*****集合中的空字符串個數(shù)=" + count);

7、Collectors

Collectors類實現(xiàn)了很多歸約操作,例如將流轉換成集合和集合元素,Collectors可用于返回列表或字符串

 List<String> orgCollectors = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "jkl");
        List<String> filtered = orgCollectors.stream().filter(string -> !string.isEmpty())
                .collect(Collectors.toList());
        System.out.println("篩選列表:" + filtered);

        String mergedString = stringList.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(","));
        System.out.println("合并字符串:" + mergedString);

統(tǒng)計:

 //統(tǒng)計
            List<Integer> orgNums = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
            IntSummaryStatistics statistics = numbers.stream().mapToInt((x) -> x).summaryStatistics();
            System.out.println("列表中最大的數(shù):" + statistics.getMax());
            System.out.println("列表中最小的數(shù):" + statistics.getMin());
            System.out.println("所有數(shù)之和:" + statistics.getSum());
            System.out.println("平均數(shù):" + statistics.getAverage());

8、轉化(將枚舉類轉成map)

將一個枚舉類轉成一個map,使用的示例可以參考下方:

 Map<Integer, String> disableFlagMap = Arrays.stream(DisableFlagEnum.values()).collect(Collectors.toMap(p -> p.getCode(), p -> p.getDesc()));

完整的代碼是:

public enum DisableFlagEnum {
    NORMAL(0, "正常"),

    DELETE(1, "已刪除");

    private Integer code;

    private String desc;

    DisableFlagEnum(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public Integer getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }
 
    public static String getDesc(Integer code) {
        Map<Integer, String> disableFlagMap = Arrays.stream(DisableFlagEnum.values()).collect(Collectors.toMap(p -> p.getCode(), p -> p.getDesc()));
        return disableFlagMap.get(code);
    }
}

demo的運行結果:

總結:

本文首先介紹了JDK1.8中的Stream流,Stream流是是一個來自數(shù)據(jù)源的元素隊列并支持聚合操作。它的特點就是中間過程不會存儲數(shù)據(jù),不會改變數(shù)據(jù)源本身。接著介紹了stream的使用示例,stream流的使用一般是要結合函數(shù)式接口使用的。

以上就是Java的Stream流的詳細內容,更多關于Java的Stream流的資料請關注腳本之家其它相關文章!希望大家以后多多支持腳本之家!

相關文章

  • 解析JDK14中的java tools簡介

    解析JDK14中的java tools簡介

    這篇文章主要介紹了JDK14中的java tools簡介,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Spring使用aop切面編程時要給那些類加注解的實例

    Spring使用aop切面編程時要給那些類加注解的實例

    在使用切面編程時,通常需要為以下類或組件添加注解來標識它們,以便 Spring 或其他切面框架能夠正確識別和處理它們,這篇文章主要介紹了Spring使用aop切面編程時要給那些類加注解,需要的朋友可以參考下
    2023-11-11
  • Java中字節(jié)流和字符流的區(qū)別與聯(lián)系

    Java中字節(jié)流和字符流的區(qū)別與聯(lián)系

    Java中的字節(jié)流和字符流是用于處理輸入和輸出的兩種不同的流,本文主要介紹了Java中字節(jié)流和字符流的區(qū)別與聯(lián)系,字節(jié)流以字節(jié)為單位進行讀寫,適用于處理二進制數(shù)據(jù),本文結合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2024-12-12
  • SpringBoot構建Restful service完成Get和Post請求

    SpringBoot構建Restful service完成Get和Post請求

    這篇文章主要介紹了SpringBoot構建Restful service完成Get和Post請求的示例代碼,感興趣的朋友一起看看吧
    2017-08-08
  • Java中的移位運算符使用及原理詳解

    Java中的移位運算符使用及原理詳解

    在 Java 中,移位運算符用于對二進制數(shù)進行位移操作,它們可以將一個數(shù)的所有位向左或向右移動指定的位數(shù),本文小編將給大家詳細的介紹一下Java移位運算符,需要的朋友可以參考下
    2023-09-09
  • IDEA配置Tomcat后,控制臺tomcat?catalina?log出現(xiàn)亂碼問題

    IDEA配置Tomcat后,控制臺tomcat?catalina?log出現(xiàn)亂碼問題

    本文介紹了如何通過設置Tomcat和IDEA的編碼格式來解決編碼問題,首先嘗試修改Tomcat的logging.properties文件中的編碼設置,如果未解決問題,則調整IDEA的編碼設置,通過修改vmoptions文件來全局設置IDEA的編碼格式,作者分享了個人成功解決問題的方法和步驟,供其他開發(fā)者參考
    2024-09-09
  • spring framework體系結構及模塊jar依賴關系詳解

    spring framework體系結構及模塊jar依賴關系詳解

    在本篇文章里小編給大家整理的是關于spring framework體系結構及模塊jar依賴關系,對此有興趣的朋友們可以學習下。
    2019-09-09
  • java學習之JasperReport踩坑

    java學習之JasperReport踩坑

    本篇文章介紹的是在JAVA學習中JasperReport遇到的坑以及解決辦法,有需要的朋友參考下吧。
    2018-01-01
  • 詳解Mybatis中的 ${} 和 #{}區(qū)別與用法

    詳解Mybatis中的 ${} 和 #{}區(qū)別與用法

    這篇文章主要介紹了Mybatis中的 ${} 和 #{}區(qū)別與用法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 基于Java編寫簡單的Excel工具類

    基于Java編寫簡單的Excel工具類

    這篇文章主要為大家詳細介紹了如何基于Java編寫簡單的Excel工具類,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2024-02-02

最新評論

五原县| 长葛市| 集贤县| 璧山县| 沙坪坝区| 绥滨县| 轮台县| 社旗县| 富蕴县| 诏安县| 霍城县| 镇坪县| 三穗县| 娄烦县| 海盐县| 黄梅县| 沁阳市| 临湘市| 眉山市| 略阳县| 江川县| 思茅市| 长治市| 精河县| 普兰店市| 莱西市| 双江| 十堰市| 贵定县| 六盘水市| 遂溪县| 香河县| 封开县| 商河县| 新野县| 张家口市| 鹤壁市| 贵阳市| 峡江县| 孝感市| 侯马市|