中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java?Stream流怎么生成和操作

發布時間:2022-09-19 14:08:17 來源:億速云 閱讀:113 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Java Stream流怎么生成和操作”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java Stream流怎么生成和操作”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

一、Stream流簡單示例

需求:

按照要求集合創建和遍歷

創建一個結合,存儲多個字符串元素

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

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

遍歷上一步得到集合

原始方式示例代碼:

public class StreamDemo {
    public static void main(String[] args) {
        //創建一個集合,存儲多個字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張天坤");
 
        //把集合中所有以"張"開頭的元素存儲到一個新的集合 
        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) {
        //創建一個集合,存儲多個字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張天坤");
 
        //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轉成Set集合,間接生成流

數組

通過Stream接口的靜態方法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();
 
        //數組可以通過Stream接口的靜態方法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流中間操作方法

概念:

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

常見方法:

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

filter代碼示例

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

sorted代碼示例

public class StreamDemo04 {
    public static void main(String[] args) {
        //創建一個集合,存儲多個字符串元素 
        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:按照字母順序把數據在控制臺輸出 
        list.stream().sorted().forEach(System.out::println); 
 
        //需求2:按照字符串長度把數據在控制臺輸出 
        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) {
        //創建一個集合,存儲多個字符串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("10");
        list.add("20");
        list.add("30");
        list.add("40");
        list.add("50");
 
        //需求:將集合中的字符串數據轉換為整數之后在控制臺輸出 
        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);
    }
}

讀到這里,這篇“Java Stream流怎么生成和操作”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

靖安县| 崇左市| 罗山县| 平潭县| 神农架林区| 宜城市| 临泽县| 酉阳| 专栏| 顺昌县| 玉屏| 灵台县| 加查县| 镇远县| 天峻县| 稻城县| 锦州市| 彭州市| 寿阳县| 阿拉善左旗| 安泽县| 西吉县| 马边| 岳普湖县| 遂昌县| 荆门市| 酒泉市| 桦南县| 会同县| 长宁县| 鲁甸县| 泽普县| 赞皇县| 洮南市| 西峡县| 崇仁县| 普陀区| 长阳| 丁青县| 湖口县| 密山市|