Lambda表达式和Stream的中间操作以及终止操作

本文介绍了Java中的Lambda表达式,强调其简洁的语法和作为方法参数的特性。接着探讨了函数式接口,特别是`@FunctionalInterface`注解的重要性。文章详细讲解了Stream的概念,指出Stream操作是延迟执行的,并分为中间操作(如filter、limit、distinct等)和终止操作(如forEach、min、max、collect等)。最后,通过实例展示了如何使用这些操作处理数据,例如收集所有员工的姓名到一个list集合。
摘要由CSDN通过智能技术生成

1.Lambda表达式的使用

  • 特殊的匿名内部类,语法更为简洁

  • 允许把函数作为一个方法的参数,将代码像数据一样传递

  • 引入了新的操作符" ->" ,这个操作符将表达式范围两部分

    • 左侧(参数1,参数2)表示参数列表

    • 右侧{ }内部是方法体

    • 形参类型会自动推断

      • Comparator<String> comparator1= (o1, o2)->{
                 
            return 0;
        };
        
      • o1、o2会自动推断出是等号前面泛型的String类型 所以写与不写不影响o1、o2类型

    • 如果形参列表为空只要保留()

    • 如果形参只有一个()可以省略只写参数名称就可以

    • 如果执行语句只有一句,且没有返回值{}可以省略,若有返回值,若想省去{}则必须同时省略return,且执行语句也保证只有一句;

    • Lambda语句不会生成匿名内部类文件

2.函数式接口

  • 如果一个接口只有一个抽象方法,则该接口称之为函数式接口,函数式接口可以使用Lanbda表达式,Lambda表达式会被匹配到这个抽象方法上

  • @Functionalinterface 注解检测接口是否符合函数式接口

    • @FunctionalInterface//检测接口是否符合函数式接口
      public interface USB {
             //创建接口
          void service();//只能创建单个方法
      }
      

3.函数式接口的使用

  • Function接口

    • Function<String,String> function1 = new Function<String, String>() {
             
          @Override
          public String apply(String s) {
             
              return s.toLowerCase();//将传入的大写字母转化为小写
          }
      };
      //使用Lambda表达式简化
      Function<String,String> function = s->s.toLowerCase();//简写return
      

4.方法引用

  • 方法引用是Lambda表达式的一种简写形式;
  • 对象::实例方法
  • 类名::静态方法
  • 类名::实例方法
  • 类名::new

5.Stream

  • 流中保存对集合挥着数组数据的操作和集合类似,但集合中保存的是数据;
  • Stream自身不会存储元素
  • 不会改变源对象,
  • Stream操作是延迟执行的,需要结果的时候才会执行
  • 使用步骤
    • 创建一个流
    • 中间操作
      • 在一个会多个步骤中,将初始Stream转化到另一个Stream的中间操作
    • 终止操作
      • 使用一个终止操作来产生一个结果,该操作会强制它之前的延迟操作立即执行
      • 只使用中间操作而不使用终止操作无法输出所需要的的数据

6.流的使用

  • ArrayList<String> arrayList = new ArrayList<>();
    arrayList.add("西瓜");
    arrayList.add("苹果");
    arrayList.add("橘子");
    Stream<String> stream = arrayList.parallelStream();
    stream.forEach(System.out::println);
    
  • Stream<Integer> is = Stream.of(10, 20, 30, 40, 50);
    is.forEach(System.out::println);
    
  • //迭代流
    Stream<Integer> iterate = Stream.iterate(0, x -> x + 2);
    iterate.limit
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值