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

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語句一樣的操作,比如filter,map,reduce,match,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)文章

  • SpringBoot設(shè)置默認(rèn)主頁(yè)的方法步驟

    SpringBoot設(shè)置默認(rèn)主頁(yè)的方法步驟

    這篇文章主要介紹了SpringBoot設(shè)置默認(rèn)主頁(yè)的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java技術(shù)長(zhǎng)久占居主要地位的12個(gè)原因

    Java技術(shù)長(zhǎng)久占居主要地位的12個(gè)原因

    這篇文章主要為大家詳細(xì)介紹了12個(gè)Java長(zhǎng)久占居主要地位的原因,感興趣的小伙伴們可以參考一下
    2016-07-07
  • springboot接口多實(shí)現(xiàn)類選擇性注入解決方案

    springboot接口多實(shí)現(xiàn)類選擇性注入解決方案

    這篇文章主要為大家介紹了springboot接口多實(shí)現(xiàn)類選擇性注入解決方案的四種方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • 原理分析Java?Mybatis中的Mapper

    原理分析Java?Mybatis中的Mapper

    這篇文章主要為大家介紹了Java?Mybatis中的Mapper,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • idea安裝插件找不到的問題及解決

    idea安裝插件找不到的問題及解決

    這篇文章主要介紹了idea安裝插件找不到的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • SpringBoot 多線程事務(wù)回滾的實(shí)現(xiàn)

    SpringBoot 多線程事務(wù)回滾的實(shí)現(xiàn)

    本文是基于springboot的@Async注解開啟多線程,并通過自定義注解和AOP實(shí)現(xiàn)的多線程事務(wù),避免繁瑣的手動(dòng)提交/回滾事務(wù),感興趣的可以了解一下
    2024-02-02
  • SpringMVC文件上傳的配置實(shí)例詳解

    SpringMVC文件上傳的配置實(shí)例詳解

    本文通過實(shí)例代碼給大家介紹SpringMVC文件上傳的配置相關(guān)內(nèi)容,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • MybatisPlus代碼生成器含XML文件詳解

    MybatisPlus代碼生成器含XML文件詳解

    這篇文章主要介紹了MybatisPlus代碼生成器含XML文件詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring Security 表單登錄功能的實(shí)現(xiàn)方法

    Spring Security 表單登錄功能的實(shí)現(xiàn)方法

    這篇文章主要介紹了Spring Security 表單登錄,本文將構(gòu)建在之前簡(jiǎn)單的 Spring MVC示例 之上,因?yàn)檫@是設(shè)置Web應(yīng)用程序和登錄機(jī)制的必不可少的。需要的朋友可以參考下
    2019-06-06
  • Java8日期時(shí)間類LocalDateTime比較大小舉例

    Java8日期時(shí)間類LocalDateTime比較大小舉例

    LocalDate是Java?8中的日期類之一,它表示一個(gè)日期,下面這篇文章主要給大家介紹了關(guān)于Java8日期時(shí)間類LocalDateTime比較大小的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05

最新評(píng)論