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

Java?Stream流的常見生成和操作方法總結(jié)

 更新時間:2022年09月18日 09:45:14   作者:夏志121  
從Java1.8開始提出了Stream流的概念,本文將通過示例為大家詳細講解一下Stream流的常見生成和操作方法,感興趣的小伙伴可以了解一下

一、Stream流簡單示例

需求:

按照要求集合創(chuàng)建和遍歷

創(chuàng)建一個結(jié)合,存儲多個字符串元素

把集合中所有以"張"開頭的元素存儲到一個新的集合

把"張"開頭的集合中的長度為3的元素存儲到一個新的集合

遍歷上一步得到集合

原始方式示例代碼:

public class StreamDemo {
    public static void main(String[] args) {
        //創(chuàng)建一個集合,存儲多個字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張?zhí)炖?);
 
        //把集合中所有以"張"開頭的元素存儲到一個新的集合 
        ArrayList<String> zhangList = new ArrayList<String>();
 
        for(String s : list) {
            if(s.startsWith("張")) {
                zhangList.add(s);
            }
        }
 
        // System.out.println(zhangList); 
 
        //把"張"開頭的集合中的長度為3的元素存儲到一個新的集合 
        ArrayList<String> threeList = new ArrayList<String>();
 
        for(String s : zhangList) {
            if(s.length() == 3) {
                threeList.add(s);
            }
        }
 
        // System.out.println(threeList); 
 
        //遍歷上一步得到的集合 
        for(String s : threeList) {
            System.out.println(s);
        }
 
        System.out.println("--------");
        //Stream流來改進 
        // list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() == 3).forEach(s -> System.out.println(s));
        list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() == 3).forEach(System.out::println);
    }
}

使用Stream流示例代碼:

public class StreamDemo {
    public static void main(String[] args) {
        //創(chuàng)建一個集合,存儲多個字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張?zhí)炖?);
 
        //Stream流來改進
        list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() ==
                3).forEach(System.out::println);
    }
}

二、Stream流常見生成方式

生成Stream流的方式:

Collection體系集合

使用默認方法stream()生成流,default Stream stream()

Map體系集合

把Map轉(zhuǎn)成Set集合,間接生成流

數(shù)組

通過Stream接口的靜態(tài)方法of(T...values)生成流

代碼演示:

public class StreamDemo {
    public static void main(String[] args) {
        //Collection體系的集合可以使用默認方法stream()生成流 
        List<String> list = new ArrayList<String>();
        Stream<String> listStream = list.stream();
 
        Set<String> set = new HashSet<String>();
        Stream<String> setStream = set.stream();
 
        //Map體系的集合間接的生成流 
        Map<String,Integer> map = new HashMap<String, Integer>();
        Stream<String> keyStream = map.keySet().stream();
        Stream<Integer> valueStream = map.values().stream();
        Stream<Map.Entry<String, Integer>> entryStream = map.entrySet().stream();
 
        //數(shù)組可以通過Stream接口的靜態(tài)方法of(T... values)生成流 
        String[] strArray = {"hello","world","java"};
        Stream<String> strArrayStream = Stream.of(strArray);
        Stream<String> strArrayStream2 = Stream.of("hello", "world", "java");
        Stream<Integer> intStream = Stream.of(10, 20, 30);
    }
}

三、Stream流中間操作方法

概念:

中間操作的意思是,執(zhí)行完成此方法之后,Stream流依然可以繼續(xù)執(zhí)行其他操作

常見方法:

方法名說明
Stream fifilter(Predicate predicate)用于對流中的數(shù)據(jù)進行過濾
Stream limit(long maxSize)返回此流中的元素組成的流,截取前指定參數(shù)個數(shù)的數(shù)據(jù)
Stream skip(long n)跳過指定參數(shù)個數(shù)的數(shù)據(jù),返回由該流的剩余元素組成的流
static Stream concat(Stream a, Stream b)合并a和b兩個流為一個流
Stream distinct()返回由該流的不同元素(根據(jù)Object.equals(Object) )組成的流
Stream sorted()返回由此流的元素組成的流,根據(jù)自然順序排序
Stream sorted(Comparator comparator)返回由該流的元素組成的流,根據(jù)提供的Comparator進行排序
Stream map(Function mapper)返回由給定函數(shù)應(yīng)用于此流的元素的結(jié)果組成的流
IntStream mapToInt(ToIntFunction mapper)返回一個IntStream其中包含將給定函數(shù)應(yīng)用于此流的元素的結(jié)果

filter代碼示例

public class StreamDemo01 {
    public static void main(String[] args) {
        //創(chuàng)建一個集合,存儲多個字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張?zhí)炖?);
 
        //需求1:把list集合中以張開頭的元素在控制臺輸出 
        list.stream().filter(s -> s.startsWith("張")).forEach(System.out::println);
        System.out.println("--------");
 
        //需求2:把list集合中長度為3的元素在控制臺輸出 
        list.stream().filter(s -> s.length() == 3).forEach(System.out::println);
        System.out.println("--------");
 
        //需求3:把list集合中以張開頭的,長度為3的元素在控制臺輸出 
        list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() ==
                3).forEach(System.out::println);
    }
}

limit&skip代碼示例

public class StreamDemo02 {
    public static void main(String[] args) {
        //創(chuàng)建一個集合,存儲多個字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張?zhí)炖?);
 
        //需求1:取前3個數(shù)據(jù)在控制臺輸出 
        list.stream().limit(3).forEach(System.out::println);
        System.out.println("--------");
 
        //需求2:跳過3個元素,把剩下的元素在控制臺輸出 
        list.stream().skip(3).forEach(System.out::println);
        System.out.println("--------");
 
        //需求3:跳過2個元素,把剩下的元素中前2個在控制臺輸出 
        list.stream().skip(2).limit(2).forEach(System.out::println);
    }
}

concat&distinct代碼示例

public class StreamDemo03 {
    public static void main(String[] args) {
        //創(chuàng)建一個集合,存儲多個字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張?zhí)炖?);
 
        //需求1:取前4個數(shù)據(jù)組成一個流 
        Stream<String> s1 = list.stream().limit(4);
 
        //需求2:跳過2個數(shù)據(jù)組成一個流 
        Stream<String> s2 = list.stream().skip(2);
 
        //需求3:合并需求1和需求2得到的流,并把結(jié)果在控制臺輸出 
        Stream.concat(s1,s2).forEach(System.out::println); 
 
        //需求4:合并需求1和需求2得到的流,并把結(jié)果在控制臺輸出,要求字符串元素不能重復(fù) 
        Stream.concat(s1,s2).distinct().forEach(System.out::println);
    }
}

sorted代碼示例

public class StreamDemo04 {
    public static void main(String[] args) {
        //創(chuàng)建一個集合,存儲多個字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("linqingxia");
        list.add("zhangmanyu");
        list.add("wangzuxian");
        list.add("liuyan");
        list.add("zhangmin");
        list.add("zhangwuji");
 
        //需求1:按照字母順序把數(shù)據(jù)在控制臺輸出 
        list.stream().sorted().forEach(System.out::println); 
 
        //需求2:按照字符串長度把數(shù)據(jù)在控制臺輸出 
        list.stream().sorted((s1,s2) -> {
            int num = s1.length()-s2.length();
            int num2 = num==0?s1.compareTo(s2):num;
            return num2;
        }).forEach(System.out::println);
    }
}

map&mapToInt代碼示例

public class StreamDemo05 {
    public static void main(String[] args) {
        //創(chuàng)建一個集合,存儲多個字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("10");
        list.add("20");
        list.add("30");
        list.add("40");
        list.add("50");
 
        //需求:將集合中的字符串?dāng)?shù)據(jù)轉(zhuǎn)換為整數(shù)之后在控制臺輸出 
        list.stream().map(s -> Integer.parseInt(s)).forEach(System.out::println); 
        list.stream().map(Integer::parseInt).forEach(System.out::println); 
        list.stream().mapToInt(Integer::parseInt).forEach(System.out::println); 
 
        //int sum() 返回此流中元素的總和 
        int result = list.stream().mapToInt(Integer::parseInt).sum();
        System.out.println(result);
    }
}

到此這篇關(guān)于Java Stream流的常見生成和操作方法總結(jié)的文章就介紹到這了,更多相關(guān)Java Stream流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springmvc 獲取@Requestbody轉(zhuǎn)換的異常處理方式

    springmvc 獲取@Requestbody轉(zhuǎn)換的異常處理方式

    這篇文章主要介紹了springmvc 獲取@Requestbody轉(zhuǎn)換的異常處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 配置java.library.path加載庫文件問題

    配置java.library.path加載庫文件問題

    這篇文章主要介紹了配置java.library.path加載庫文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • java實現(xiàn)pdf按頁轉(zhuǎn)換為圖片

    java實現(xiàn)pdf按頁轉(zhuǎn)換為圖片

    這篇文章主要為大家詳細介紹了java實現(xiàn)pdf按頁轉(zhuǎn)換為圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Java 程序員必備的 Intellij IDEA 插件

    Java 程序員必備的 Intellij IDEA 插件

    java插件十分方便實用,以下是我用過不錯的Intellij插件,當(dāng)然還有很多插件也都不錯,下面將我覺得不錯的插件分享給大家,希望能幫到大家
    2018-09-09
  • 詳細介紹Spring的配置文件

    詳細介紹Spring的配置文件

    這篇文章主要為大家詳細介紹了Spring中的配置文件的命名以及它的配置文件都有些什么。文中的示例代碼講解詳細,感興趣的小伙伴可以跟上小編一起學(xué)習(xí)一下
    2022-10-10
  • Java線程阻塞和喚醒的幾種方式詳解

    Java線程阻塞和喚醒的幾種方式詳解

    這篇文章主要介紹了Java線程阻塞和喚醒的幾種方式詳解,線程阻塞是指當(dāng)一個線程無法繼續(xù)執(zhí)行時,它會進入阻塞狀態(tài),直到某個條件滿足后才能繼續(xù)執(zhí)行,線程阻塞可以通過多種方式實現(xiàn),如等待鎖、等待IO操作、等待其他線程的完成等,需要的朋友可以參考下
    2023-10-10
  • Admin - SpringBoot + Maven 多啟動環(huán)境配置實例詳解

    Admin - SpringBoot + Maven 多啟動環(huán)境配置實例詳解

    這篇文章主要介紹了Admin - SpringBoot + Maven 多啟動環(huán)境配置,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Java設(shè)計模式的事件模型詳解

    Java設(shè)計模式的事件模型詳解

    這篇文章主要為大家詳細介紹了Java設(shè)計模式的事件模型,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java實現(xiàn)學(xué)生管理系統(tǒng)

    Java實現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)學(xué)生管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java從同步容器到并發(fā)容器的操作過程

    Java從同步容器到并發(fā)容器的操作過程

    這篇文章主要介紹了Java從同步容器到并發(fā)容器的操作過程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10

最新評論