1.体验Stream流【理解】


按照下面的要求完成集合的创建和遍历

  • 创建一个集合,存储多个字符串元素
  • 把集合中所有以”张”开头的元素存储到一个新的集合
  • 把”张”开头的集合中的长度为3的元素存储到一个新的集合
  • 遍历上一步得到的集合

  • 原始方式代码演示 ```java import java.util.ArrayList;

/**

  • 按照下面的要求完成集合的创建和遍历
  • • 创建一个集合,存储多个字符串元素
  • • 把集合中所有以”张”开头的元素存储到一个新的集合
  • • 把”张”开头的集合中的长度为3的元素存储到一个新的集合
  • • 遍历上一步得到的集合 */ public class StreamDemo01 { public static void main(String[] args) {
    1. ArrayList<String> list = new ArrayList<>();
    2. list.add("林青霞");
    3. list.add("张曼玉");
    4. list.add("王祖贤");
    5. list.add("柳岩");
    6. list.add("张敏");
    7. list.add("张无忌");
    8. //遍历原始集合,将所有以张开头的元素储存到新的集合中
    9. ArrayList<String> zhangList = new ArrayList<>();
    10. for (String s : list) {
    11. if (s.startsWith("张")) {
    12. zhangList.add(s);
    13. }
    14. }
    15. //遍历上一步得到的zhangList,筛选长度为3的元素储存到新的集合中
    16. ArrayList<String> lengthIs3 = new ArrayList<>();
    17. for (String s : zhangList) {
    18. if (s.length() == 3) {
    19. lengthIs3.add(s);
    20. }
    21. }
    22. //遍历上一步得到的集合
    23. for (String s : lengthIs3) {
    24. System.out.println(s);
    25. }
    } }
  1. - 使用Stream流示例代码
  2. ```java
  3. import java.util.ArrayList;
  4. /**
  5. * 按照下面的要求完成集合的创建和遍历
  6. * • 创建一个集合,存储多个字符串元素
  7. * • 把集合中所有以"张"开头的元素存储到一个新的集合
  8. * • 把"张"开头的集合中的长度为3的元素存储到一个新的集合
  9. * • 遍历上一步得到的集合
  10. */
  11. public class Demo02 {
  12. public static void main(String[] args) {
  13. ArrayList<String> list = new ArrayList<>();
  14. list.add("林青霞");
  15. list.add("张曼玉");
  16. list.add("王祖贤");
  17. list.add("柳岩");
  18. list.add("张敏");
  19. list.add("张无忌");
  20. list.stream().filter(s -> s.startsWith("张")).filter(s -> s.length()==3).forEach(System.out::println);
  21. }
  22. }
  • Stream流的好处
    • 直接阅读代码的字面意思即可完美展现无关逻辑方式的语句:获取流—>过滤姓张—>过滤长度为3—>遍历打印
    • Stream流把真正的函数式编程风格引入到Java中

2.Stream流的常见生成方式【应用】


  • Steam流的思想

Stream流思想.jpg

  • 生成Stream流的方法:
    • Conllection集合
      • 使用Conllection接口默认方法stream()生成流,default Stream stream()
    • Map集合
      • 把Map集合转成Set集合,间接生成流
        1. - 通过keySet( )获得keyset集合
        2. - 通过values( )获得valuesConllection集合
        3. - 通过entry( )获得entry<K,V>,的set集合
      • 通过获得的Conllection类集合来调用stream方法获得stream流
    • 数组
      • 通过Arrays工具类的stream方法传入数组类型的参数获得Stream流
      • 同故宫Stream接口的静态方法of(T … values)方法,获得流

        3.Stream流的中间操作方法【应用】


概念:中间操作的意思就是,执行完此次方法操作之后,返回值依然是一个Stream流对象,可以继续执行其他操作

常见方法

方法名 说明
Stream filter(Predicate predicate) 用于对流中的数据进行筛选
Stream limit(long maxSize) 截取流中指定长度的数据,并返回该长度的新的流
Stream skip(long n) 跳过流中指定长度的数据,并返回剩余数据的流
static Stream concat(Stream a,Stream b) 【静态方法】将流a、b合并,并返回新的流
Stream destinct( ) 返回由此流去重的元素组成的流
Stream sorted() 返回此流按照自然顺序排序的流
Stream sorted(Comparator comparator) 返回此流按照给定comparator排序的流
Stream map(Function mapper) 返回由给定函数转换之后的流

4.Stream流终端操作的方法【应用】

概念:终端操作(terminal operation)的意思就是执行完此操作之后,Stream流将不能在执行其他操作

常见方法

方法名 说明
void forEach(Consumer action) 对此流中的每个元素执行操作
long count() 返回此流中的元素数量

5.Stream流的收集操作【应用】


概念 :对数据使用Stream流的方式操作完毕之后,可以把流中的数据收集到集合中。