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

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

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

一、Stream流簡(jiǎn)單示例

需求:

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

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

把集合中所有以"張"開(kāi)頭的元素存儲(chǔ)到一個(gè)新的集合

把"張"開(kāi)頭的集合中的長(zhǎng)度為3的元素存儲(chǔ)到一個(gè)新的集合

遍歷上一步得到集合

原始方式示例代碼:

public class StreamDemo {
    public static void main(String[] args) {
        //創(chuàng)建一個(gè)集合,存儲(chǔ)多個(gè)字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張?zhí)炖?);
 
        //把集合中所有以"張"開(kāi)頭的元素存儲(chǔ)到一個(gè)新的集合 
        ArrayList<String> zhangList = new ArrayList<String>();
 
        for(String s : list) {
            if(s.startsWith("張")) {
                zhangList.add(s);
            }
        }
 
        // System.out.println(zhangList); 
 
        //把"張"開(kāi)頭的集合中的長(zhǎng)度為3的元素存儲(chǔ)到一個(gè)新的集合 
        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流來(lái)改進(jìn) 
        // 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)建一個(gè)集合,存儲(chǔ)多個(gè)字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張?zhí)炖?);
 
        //Stream流來(lái)改進(jìn)
        list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() ==
                3).forEach(System.out::println);
    }
}

二、Stream流常見(jiàn)生成方式

生成Stream流的方式:

Collection體系集合

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

Map體系集合

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

數(shù)組

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

代碼演示:

public class StreamDemo {
    public static void main(String[] args) {
        //Collection體系的集合可以使用默認(rèn)方法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ù)組可以通過(guò)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í)行其他操作

常見(jiàn)方法:

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

filter代碼示例

public class StreamDemo01 {
    public static void main(String[] args) {
        //創(chuàng)建一個(gè)集合,存儲(chǔ)多個(gè)字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張?zhí)炖?);
 
        //需求1:把list集合中以張開(kāi)頭的元素在控制臺(tái)輸出 
        list.stream().filter(s -> s.startsWith("張")).forEach(System.out::println);
        System.out.println("--------");
 
        //需求2:把list集合中長(zhǎng)度為3的元素在控制臺(tái)輸出 
        list.stream().filter(s -> s.length() == 3).forEach(System.out::println);
        System.out.println("--------");
 
        //需求3:把list集合中以張開(kāi)頭的,長(zhǎng)度為3的元素在控制臺(tái)輸出 
        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)建一個(gè)集合,存儲(chǔ)多個(gè)字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張?zhí)炖?);
 
        //需求1:取前3個(gè)數(shù)據(jù)在控制臺(tái)輸出 
        list.stream().limit(3).forEach(System.out::println);
        System.out.println("--------");
 
        //需求2:跳過(guò)3個(gè)元素,把剩下的元素在控制臺(tái)輸出 
        list.stream().skip(3).forEach(System.out::println);
        System.out.println("--------");
 
        //需求3:跳過(guò)2個(gè)元素,把剩下的元素中前2個(gè)在控制臺(tái)輸出 
        list.stream().skip(2).limit(2).forEach(System.out::println);
    }
}

concat&distinct代碼示例

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

sorted代碼示例

public class StreamDemo04 {
    public static void main(String[] args) {
        //創(chuàng)建一個(gè)集合,存儲(chǔ)多個(gè)字符串元素 
        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ù)在控制臺(tái)輸出 
        list.stream().sorted().forEach(System.out::println); 
 
        //需求2:按照字符串長(zhǎng)度把數(shù)據(jù)在控制臺(tái)輸出 
        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)建一個(gè)集合,存儲(chǔ)多個(gè)字符串元素 
        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ù)之后在控制臺(tái)輸出 
        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àn)生成和操作方法總結(jié)的文章就介紹到這了,更多相關(guān)Java Stream流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

    配置java.library.path加載庫(kù)文件問(wèn)題

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

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

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

    Java 程序員必備的 Intellij IDEA 插件

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

    詳細(xì)介紹Spring的配置文件

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

    Java線(xiàn)程阻塞和喚醒的幾種方式詳解

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

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

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

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

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

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

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

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

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

最新評(píng)論