1 package day14.lesson2; 2 3 import java.util.ArrayList; 4 5 /* 6 2 Strem流 7 8 2.1 体验Stream流 9 10 案例需求 11 按照下面的要求完成集合的创建和遍历 12 创建一个集合,存储多个字符串元素 13 把集合中所有以"张"开头的元素存储到一个新的集合 14 把"张"开头的集合中的长度为3的元素存储到一个新的集合 15 遍历上一步得到的集合 16 17 Stream流的好处 18 直接阅读代码的字面意思即可完美展示无关逻辑方式的语义:获取流、过滤姓张、过滤长度为3、逐一打印 19 Stream流把真正的函数式编程风格引入到Java中 20 */ 21 public class Demo1Stream { 22 public static void main(String[] args) { 23 ArrayList<String> arrayList = new ArrayList<>(); 24 arrayList.add("tom"); 25 arrayList.add("张盼"); 26 arrayList.add("张无忌"); 27 arrayList.add("sam"); 28 arrayList.add("amy"); 29 arrayList.add("张曼玉"); 30 31 //传统方式实现 32 /*ArrayList<String> zhangList = new ArrayList<>(); 33 for (String str: arrayList){ 34 if(str.startsWith("张")){ 35 zhangList.add(str); 36 } 37 } 38 System.out.println(zhangList); //[张盼, 张无忌, 张曼玉] 39 ArrayList<String> threeList = new ArrayList<>(); 40 for (String str: zhangList){ 41 if (str.length() == 3){ 42 threeList.add(str); 43 } 44 } 45 System.out.println(threeList); //[张无忌, 张曼玉] 46 for (String str: threeList){ 47 System.out.println(str); 48 }*/ 49 50 //Stream流实现 51 //通常Stream流要搭配函数式接口/Lambda表达式来使用 52 arrayList.stream().filter(s -> s.startsWith("张")).filter(s -> s.length()==3).forEach(s -> System.out.println(s)); 53 //也可以用方法引用代替其中的Lambda 54 arrayList.stream().filter(s -> s.startsWith("张")).filter(s -> s.length()==3).forEach(System.out::println); 55 } 56 }
1 package day14.lesson2; 2 3 import java.util.*; 4 import java.util.stream.Stream; 5 6 /* 7 2.2 Stream流的使用和常见生成方式 8 9 Stream流的使用(见上例图) 10 生成流 11 通过数据源(集合、数组等)生成流 12 list.stream() 13 中间操作 14 一个流后面可以跟随0个或多个中间操作, 15 其目的是打开流,做出某种程度的数据过滤/映射,返回一个新流,交给下一个操作使用 16 filter() 17 终结操作 18 一个流只能有一个终结操作,且终结操作必定是流的最后一个操作 19 当这个操作执行后,流就被用'光'了,无法再被操作 20 forEach() 21 22 生成Stream流的方式 23 Collection体系集合 24 使用默认方法stream()生成流,default Stream<E> stream() 25 Map体系集合 26 Map不能直接生成流,可以间接的生成流 27 数组 28 通过Stream接口的静态方法of(T... values)生成流 29 */ 30 public class Demo2Stream { 31 public static void main(String[] args) { 32 List<String> list = new ArrayList<>(); 33 Stream<String> listStream = list.stream(); 34 35 Set<String> set = new HashSet<>(); 36 Stream<String> setStream = set.stream(); 37 38 Map<String, Integer> map = new HashMap<>(); 39 Stream<String> keyStream = map.keySet().stream(); //键流 40 Stream<Integer> valueStream = map.values().stream(); //值流 41 Stream<Map.Entry<String, Integer>> entryStream = map.entrySet().stream(); //键值对流 42 43 String[] strArr = {"hello", "world", "java"}; 44 Stream<String> strArrStream = Stream.of(strArr); 45 Stream<String> strArrStream2 = Stream.of("hello", "world", "java"); 46 Stream<Integer> intArrStream = Stream.of(10, 20, 30); 47 } 48 }