Java-----Stream

前言:

Stream流是Java 8引入的功能,用于高效处理数据集合。它提供了丰富的操作方法,如过滤、映射、排序等,以简洁的方式处理数据。Stream流具有流式操作、懒执行和内部迭代的特点,能够简化代码并提高可读性。在接下来的文章中,我们将深入探讨Stream流的用法,包括创建流、筛选、转换和聚合操作等。通过学习Stream流,我们可以更好地利用Java的函数式编程特性,写出更加优雅和高效的程序

作者建议:学习知识在于深度理解,多动手、多动脑,总能更快地领悟。不要仅仅停留在阅读代码的层面,亲自动手敲打一遍,会带来更丰富的收获。通过实践,我们能够更深入地理解知识,掌握技能,并且在解决问题时更加得心应手。相信自己的能力,坚持不懈地实践,你将会取得更大的进步和成就。让学习成为一种习惯,让动手实践成为你提升的捷径,加油!你是最棒的!

目录

Stream流概论

Sream的操作

stream流创建

Stream的使用

中间操作:

终端操作


Stream流概论

   Stream是Java8的新特性,Stream用来处理集合(数组,集合类),对数组,集合类 进行各种操作过(过滤,排序....)

   Stream处理数据大体过程

       数组/集合类  --->  流  ----> 各种操作(过滤,排序) ---->结果(数组/集合类)

       数组集合类 更偏向与存储数据(各种结构)

       Stream中偏向于数据的操作(处理数据)

   什么是流

     简单的定义,就是"从支持数据操作的源,生成的元素序列"

理解:流我们可以简单理解为一个流水线工程,每一个岗位又不同的工作作用(流操作,也就是不同的方法),将这些流水线工程拼接在一起也就成为了一个商品(结果,我们所需要的).

流的大致操作:从一个数据源中获取数据,然后将数据源通过Stream流方法变成一个流,然后调取不同的方法,得到最终的结果

Sream的操作

stream流创建

  1. 最常用Stream方法(集合类常用)
  2. 静态的Stream.of()
  3. 数组流的创建Arrays.stream(数组对象);

代码示例:

        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.stream(); // 这样就把一个集合变成一个流,集合微数据源
        
        Stream<Integer> stream = Stream.of(1, 2, 3); // 返回的是一个数据流 并且拥有泛型
        
        int[] arr = new int[10];
        Arrays.stream(arr); //返回的是一个数据流

Stream的使用

Stream流接口可以分为二类:一类中间操作 一类终端操作

中间操作:会返回一个流,通过这种将一个个流连接到一起,这样就会形成一个流链条,从而满足我们的需求.最后通过终端操作,返回结果.(简单的理解:中间操作就是 流的各种数据处理)

终端操作:返回一个具体的流结果.(数组/集合/单值)

中间操作:

  1. filter:过滤流中的某些元素,
  2. sorted(): 自然排序,流中元素需实现Comparable接口
  3. distinct: 去除重复元素
  4. limit(n): 获取 n 个元素
  5. skip(n): 跳过 n 元素,配合limit(n)可实现分页
  6. map(): 将其映射成一个新的元素

代码示例:

filter:过滤流中的某些元素,

        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        arrayList.add(4);
        arrayList.add(3);
        arrayList.add(4);
        arrayList.add(5);

        arrayList.stream()
                .filter(num -> num >= 3)
                .forEach(System.out::println);

结果

3
4
3
4
5

 sorted(): 自然排序,流中元素需实现Comparable接口

        arrayList.stream().sorted().forEach(System.out::println); //默认升序
        System.out.println("-----------------");
        arrayList.stream().sorted((a, b) -> {
            return b-a;
        }).forEach(System.out::println);

  结果

1
2
3
3
4
4
5
-----------------
5
4
4
3
3
2
1

终端操作

  1. forEach: 遍历流中的元素
  2. toArray:将流中的元素倒入一个数组
  3. Min:返回流中元素最小值
  4. Max:返回流中元素最大值
  5. count:返回流中元素的总个数
  6. Reduce:所有元素求和
  7. anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足条件则返 回true,否则返回false
  8. allMatch:接收一个 Predicate 函数,当流中每个元素都符合条件时才返 回true,否则返回false
  9. findFirst:返回流中第一个元素
  10. collect:将流中的元素倒入一个集合,Collection或Map
        Integer[] arr = new Integer[]{1, 2, 3, 3, 4, 5};

        Integer max = Arrays.stream(arr).distinct().max((a, b) -> {
            return a - b;
        }).get();

        Integer min = Arrays.stream(arr).distinct().min((a, b) -> {
            return a - b;
        }).get();

        Boolean aBoolean = Arrays.stream(arr).distinct().allMatch(a -> a > 3);

        long num = Arrays.stream(arr).distinct().count();
        System.out.println(num);

        Integer sum = Arrays.stream(arr).distinct().reduce((a, b) -> {
            return a + b;
        }).get();

  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值