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

Java關(guān)于JDK1.8新特性的Stream流

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

Java 的Stream流

一、定義

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

二、操作的特征

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

三、代碼示例

1、生成流

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

 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ù)量的流

如下就是獲取一個(gè)長(zhǎng)度為10的流。

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

4、map

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

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

5、sorted

sorted方法用于對(duì)流進(jìn)行排序
如下,就是按照元素的大小進(jìn)行排序

        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("*****集合中的空字符串個(gè)數(shù)=" + count);

7、Collectors

Collectors類實(shí)現(xiàn)了很多歸約操作,例如將流轉(zhuǎ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)計(jì):

 //統(tǒng)計(jì)
            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、轉(zhuǎn)化(將枚舉類轉(zhuǎn)成map)

將一個(gè)枚舉類轉(zhuǎn)成一個(gè)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的運(yùn)行結(jié)果:

總結(jié):

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

以上就是Java的Stream流的詳細(xì)內(nèi)容,更多關(guān)于Java的Stream流的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解析JDK14中的java tools簡(jiǎn)介

    解析JDK14中的java tools簡(jiǎn)介

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

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

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

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

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

    SpringBoot構(gòu)建Restful service完成Get和Post請(qǐng)求

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

    Java中的移位運(yùn)算符使用及原理詳解

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

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

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

    spring framework體系結(jié)構(gòu)及模塊jar依賴關(guān)系詳解

    在本篇文章里小編給大家整理的是關(guān)于spring framework體系結(jié)構(gòu)及模塊jar依賴關(guān)系,對(duì)此有興趣的朋友們可以學(xué)習(xí)下。
    2019-09-09
  • java學(xué)習(xí)之JasperReport踩坑

    java學(xué)習(xí)之JasperReport踩坑

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

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

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

    基于Java編寫簡(jiǎn)單的Excel工具類

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

最新評(píng)論

黄石市| 广东省| 大冶市| 巴林左旗| 福建省| 旬邑县| 静乐县| 永定县| 寻甸| 广宗县| 杨浦区| 光泽县| 石狮市| 浙江省| 民勤县| 玉山县| 大丰市| 绥化市| 襄垣县| 米泉市| 湘阴县| 舞阳县| 连云港市| 灵丘县| 洛隆县| 南部县| 英山县| 石楼县| 北川| 安化县| 山西省| 和硕县| 涿鹿县| 常德市| 稻城县| 富阳市| 黄山市| 特克斯县| 兰考县| 阿瓦提县| 扎鲁特旗|