Stream流概述

Stream流能够简化数组和集合操作
举一个案例:体验一下Stream流
package com.key.d17_packeg_01.Steam;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class test {/*** 体验Steam流编程,简化集合和数组* @param args*/public static void main(String[] args) {List<String> namelist = new ArrayList<>();Collections.addAll(namelist,"张无忌","张三丰","周芷若","灭绝师太","张强","谢逊");System.out.println(namelist);//1、从集合中找出姓张的,放到新的集合中List<String> zhanglist = new ArrayList<>();for (String name : namelist) {//System.out.println(name);if (name.startsWith("张")){zhanglist.add(name);}}System.out.println(zhanglist);//2、从集合中找出名字为3个字的,放到新集合中List<String> countlist = new ArrayList<>();for (String countname : namelist) {if (countname.length() == 3){countlist.add(countname);}}System.out.println(countlist);/*** 使用Steam流实现上面的代码*//*namelist.stream().filter(s -> s.startsWith("张")).filter(s -> s.length() == 3);Steam流可以支持链式编程,可以通过filter拼接过滤条件filter()就是过滤函数,在filter()中加上条件即可*/namelist.stream().filter(s -> s.startsWith("张") && s.length() == 3).forEach(s -> System.out.println(s));}}

Stream流的核心思想
Stream流的三类方法

Stream流的获取

package com.key.d17_packeg_01.Steam;import java.util.*;import java.util.stream.Stream;public class GetSteam {public static void main(String[] args) {/*Collection集合获取Steam流*/Collection<String> list = new ArrayList<>();Stream<String> s = list.stream();/*Map集合获取Steam流*/Map<String,Integer> list1 = new HashMap<>();//Map集合调用Stream流时,需要将键和值分开取Stream//取键流Stream<String> key = list1.keySet().stream();//取值流Stream<Integer> value = list1.values().stream();//取键值对流Stream<Map.Entry<String,Integer>> mapStream = list1.entrySet().stream();/*数组取Stream流*/String[] arr = {"张三","李四","王五"};Stream<String> name = Arrays.stream(arr);Stream<String> name1 = Stream.of(arr);}}
Steam流的常用API

package com.key.d17_packeg_01.Steam;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.stream.Stream;public class StreamAPI {public static void main(String[] args) {List<String> name = new ArrayList<>();Collections.addAll(name,"张艺兴","周琼洁","宋轶","郭麒麟","于谦");System.out.println(name);//取前两个名字为三个字的明星name.stream().filter(s -> s.length() == 3).limit(2).forEach(s -> System.out.println(s));//另一种写法,替换s -> System.out.println(s);前提:入参一样,这里都传入了s// name.stream().filter(s -> s.length() == 3).limit(2).forEach(System.out::println);//跳过前两个名字为三个数字的明星,输出剩下的名字为三个字的明星System.out.println("----------");name.stream().filter(s -> s.length() == 3).skip(2).forEach(s -> System.out.println(s));System.out.println("----------");/*map()加工方法:给每个元素前加上固定值这里map用了重写方法*/name.stream().map(s -> "唱歌的" + s).forEach(s -> System.out.println(s));System.out.println("----------");//合并流Stream<String> s1 = name.stream().filter(s -> s.startsWith("周"));Stream<String> s2 = Stream.of("java1","java2");Stream<String> s3 = Stream.concat(s1,s2); //合并s1和s2两个Stream流s3.forEach(s -> System.out.println(s));}}

Stream流的综合应用案例

收集Stream流


package com.key.d17_packeg_01.Steam;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.stream.Collectors;import java.util.stream.Stream;public class StreamDemo {public static void main(String[] args) {List<String> namelist = new ArrayList<>();Collections.addAll(namelist,"张艺兴","周琼洁","宋轶","郭麒麟","于谦","周冬雨","张鹤伦");Stream<String> zhouname = namelist.stream().filter(s -> s.startsWith("周")); //提取namelist中姓周的明星//把姓周的明星收集到集合中去List<String> zhoulist = zhouname.collect(Collectors.toList());System.out.println(zhoulist);}}

