【Java】Stream流是什么,如何使用Stream流?

浅浅的花香味﹌ 2024-03-27 18:46 198阅读 0赞

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述

Stream流


Stream流

  • Stream流结合了Lambda表达式,简化了集合、数组的操作。
  • 使用步骤:
    • ①得到一条Stream流,并将数据放上去。
    • ②使用中间方法对流水线上的数据进行操作。
    • ③使用终结方法对流水线上的数据进行操作。
    • 小案例:
      • import java.util.ArrayList;

        public class StreamDemo {

        1. public static void main(String[] args) {
        2. /*
        3. * 创建集合、添加元素,使用Stream流,
        4. * ①将开头为“张”的元素添加进新集合
        5. * ②之后将长度为3的元素添加进新集合
        6. * ③遍历
        7. */
        8. ArrayList<String> list = new ArrayList<>();
        9. list.add("张三丰");
        10. list.add("张无忌");
        11. list.add("张强");
        12. list.add("王麻子");
        13. list.add("小李");
        14. //获取对象stream流,添加过滤条件,遍历
        15. list.stream()
        16. .filter(name -> name.startsWith("张"))
        17. .filter(name -> name.length() == 3)
        18. .forEach(name -> System.out.println(name));
        19. }

        }

  • 获取Stream流:
    • default Stream<E> stream():单列集合获取Stream流(Collection的默认方法)
    • public static <T> Stream<T> stream(T[] array):数组获取Stream流(Arrays工具类中的静态方法)
    • public static <T> stream<T> of(T... values):获取一堆零散数据的Stream流(Stream接口中的静态方法,数据需要统一类型)
    • 双列集合无法直接获取Stream流,需要先使用keySet() / entrySet()再对获取到的集合使用stream()获取。
  • Stream流中间方法:
    • Stream<T> filter(Predicate<? super T> predicate):过滤
    • Stream<T> limit(long maxSize):Stream流获取前maxSize个元素
    • Stream<T> skip(long n):跳过前n个元素获取元素
    • Stream<T> distance():元素去重,依赖HashCode() 和 equals()
    • static <T> Stream<T> concat(Stream a,Stream b):将两个流合并为一个流
    • Stream<R> map(Function<T,R> mapper):转换流中的数据类型,参数是函数式的,需重写其方法以设置转换规则,泛型依次是原本类型,转换的类型。
      • 中间方法、返回新的Stream流,流只能使用一次,建议链式编程。
      • 修改Stream流中的数据,原本集合或数组的数据不变。
  • Stream流的终结方法:
    • void forEach(Consumer action):遍历
    • long count():统计
    • toArray():将流中的数据放入数组
    • collect(Collector collector):将流中的数据放入集合
      • Collectors.toList()
      • Collectors.toSet()
      • Collectors.toMap(a,b):a,b两个函数式接口,需要编写匿名内部类,重写方法,指定数据转换规则。
    • 案例:
    • import java.util.ArrayList;
      import java.util.Collections;
      import java.util.HashMap;
      import java.util.Map;
      import java.util.stream.Collector;
      import java.util.stream.Collectors;

      public class StreamDemo {

      1. public static void main(String[] args) {
  1. /*定义集合,添加数据,留下偶数*/
  2. ArrayList<Integer> listInt = new ArrayList<>();
  3. Collections.addAll(listInt, 1,2,3,4,5,6,7,8,9,10);
  4. listInt.stream().filter(s -> s.intValue() % 2 == 0).forEach(i -> System.out.println(i));
  5. System.out.println("-------------------------------");
  6. /*定义集合,添加姓名,年龄数据,保留年龄大于24的人,数据存入Map集合*/
  7. ArrayList<String> listName = new ArrayList<>();
  8. Collections.addAll(listName, "张三,18","李四,24","小品,24","小豪,29","张无忌,16","脉哦,22");
  9. Map<String,Integer> mapName = listName.stream()
  10. .filter(s -> Integer.parseInt(s.split(",")[1]) >= 24)
  11. .collect(Collectors.toMap(
  12. s -> s.split(",")[0] ,
  13. s -> Integer.parseInt(s.split(",")[1])));
  14. mapName.entrySet().forEach(s -> System.out.println(s.getKey() + "--" + s.getValue()));
  15. }
  16. }
  17. * ![在这里插入图片描述][020d26ed8e334b85a302a8bb0a7f9fd7.png_pic_center]

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,198人围观)

还没有评论,来说两句吧...

相关阅读

    相关 什么?怎么限

    实现相对固定窗⼝来说⽐较复杂,限流效果和你的滑动单位有关,过大的时间窗口可能导致无法及时处理突发流量,而过小的时间窗口可能导致频繁地滑动窗口和重置计数器,增加系统的开销。...

    相关 什么Node.js Stream()?

    什么是流? 在Node.js中,流(Stream)是一种用于处理数据的抽象接口。它提供了一种有效的方式来读取或写入大量数据,而无需一次性将整个数据加载到内存中。 流可以