• Java8新特性(Stream流)


    Stream流是用于对数组和集合进行便捷操作的。

    Stream流

    学习Stream流的步骤:获取Stream流,Stream流常见的中间方法,Stream流常见的终结方法。

    Stream流的创建

    1. 获取数组的Stream流:Arrays.stream(arr)
    2. 获取List集合的Stream流:list.stream(  )
    3. 获取Set集合的Stream流:hashSet.stream( )
    4. 获取Map集合的Stream流:
      Set> entries = hashMap.entrySet();
      Stream> stream2 = entries.stream();

    Stream流中间方法

    中间方法指的是调用完流之后其结果是一个新的流,还可以继续调用方法,这样一来就可以支持链式编程

    调用中间方法时,一定要连续调用,否则会抛出IllegalStateException异常

    常用的中间方法

    peek方法不改变流的元素,只是对流中的元素进行操作,然后将流传递给下一个动作。

    peek是惰性的,只有在最终操作(forEach,collect,count等)被调用时才会执行。

    Stream终结方法

     

     

    终结方法不能连续调用,因为此时流已经关闭。 

     Collectors.toList( ):将Stream流中的元素累计到一个List集合中然后返回

    Collectors.toSet( ):将Stream流中的元素累计到一个Set集合中然后返回

    流的应用案例

    案例需求:有一个List集合,元素有 " 张三丰 "," 张无忌 "," 周芷若 "," 赵敏 "," 张强 " ,找出姓张,且是3个字的名 字,存入到一个新集合中去。
    1. public static void main(String[] args) {
    2. List names = new ArrayList<>();
    3. Collections.addAll(names,"张无忌","张三丰","周芷若","张强","赵敏");
    4. System.out.println(names);
    5. //找到所有姓张的,且只有三个字
    6. List threeName = new ArrayList<>();
    7. names.forEach(s -> {
    8. if(s.startsWith("张") && s.length() == 3){
    9. threeName.add(s);
    10. }
    11. });
    12. System.out.println(threeName);
    13. HashSet hashSet = new HashSet<>();
    14. //List集合的stream流
    15. Stream stream = names.stream();
    16. //Sset集合的stream流
    17. Stream stream1 = hashSet.stream();
    18. HashMap hashMap = new HashMap<>();
    19. //Map集合的stream流,需要用存放键值对的entrySet
    20. Set> entries = hashMap.entrySet();
    21. Stream> stream2 = entries.stream();
    22. String[] strings = {"1","2","3","4"};
    23. //数组获取流的方法
    24. Stream stream3 = Arrays.stream(strings);
    25. stream3.filter(new Predicate() {
    26. @Override
    27. public boolean test(String s) {
    28. //s是stream流里面的元素
    29. System.out.println(s);
    30. return s.startsWith("张") && s.length() == 3;
    31. }
    32. });
    33. //stream是获取的流对象,filter中间添加了过滤条件,collect终结方法,流式编程(链式编程)
    34. Set set = stream.filter(s -> s.startsWith("张") && s.length() == 3).collect(Collectors.toSet());
    35. System.out.println(set);
    36. }

  • 相关阅读:
    微软ADFS成本评估
    VESTA软件下载
    程序人生:去了字节跳动,才知道年薪40W的测试有这么多?
    《科研》简介及投稿要求
    16、Mybatis获取参数值的情况2(mapper接口方法的参数为多个时)
    Flutter插件之阿里百川
    Project Reactor源码分析-subscribeOn
    Netty 介绍 与 线程模型
    <Android开发> Android vold - 第一篇 vold前言简介
    【C++】队列来喽,真的很简单的
  • 原文地址:https://blog.csdn.net/m0_57218914/article/details/132844600