java8新特性之Lambda表达式入门

一 什么是Lambda表达式
  Lambda表达式:可以让你的代码更加的简洁。ambda无法单独出现,需要一个函数式接口来盛放,可以说lambda表达式方法体是函数式接口的实现,lambda实例化函数式接口,可以将函数作为方法参数,或者将代码作为数据对待。

二 Lambda表达式特性
  首先我们得知道函数式接口是什么。
  函数式接口(Functional Interfaces):如果一个接口定义个唯一一个抽象方法,那么这个接口就成为函数式接口。同时,引入了一个新的注解:@FunctionalInterface。可以把他它放在一个接口前,表示这个接口是一个函数式接口。这个注解是非必须的,只要接口只包含一个方法的接口,虚拟机会自动判断,不过最好在接口上使用注解 @FunctionalInterface 进行声明。在接口中添加了 @FunctionalInterface 的接口,只允许有一个抽象方法,否则编译器也会报错。
  Lambda表达式的语法格式:

    1.Lambda表达式使用 () 表示没有参数。
              2.如果Lambda表达式中只包含一个参数,可省略掉 () 。
              3.如果Lambda表达式的主题是一段代码块,需要使用 {} ,该代码块与普通的Java代码块并无区别,也可以返回或抛出异常。
              4.如果参数的类型可以由编译器推断得出可以省略参数类型,当然你也可以加上。
              5.可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

  常见的写法:

        (a) -> a * a
          (int a, int b) -> a + b
          (a, b) -> {return a - b;}
          () -> System.out.println(Thread.currentThread().getId())

三.方法引用
  
在lambda表达式中,方法引用是一种简化写法,引用的方法就是Lambda表达式的方法体的实现 

       语法结构:ObjectRef:: methodName 
       左边是类名或者实例名,中间的“::”是方法引用符号,右边是相应的方法名 
       方法引用一般分为三类: 
       静态方法引用,实例方法引用,构造方法引用

四.串行stream操作

         什么是 Stream ? 这里的 Stream 不同于 io 中的 InputStream 和 OutputStream,Stream 位于包 java.util.stream 中, 也是 java 8 新加入的,Stream 只的是一组支持串行并行聚合操作的元素,可以理解为集合或者迭代器的增强版。什么是聚合操作?简单举例来说常见的有平均值、最大值、最小值、总和、排序、过滤等。

  Stream 的几个特征
    单次处理。一次处理结束后,当前Stream就关闭了。
    支持并行操作
    常见的获取 Stream 的方式
    从集合中获取
      Collection.stream();
      Collection.parallelStream();

  stream这个特性十分实用,在平常serviceImpl中可以方便的对sql取到的数据进行处理而不必去手动写大量的逻辑,相当于Mybatis和Mysql在service层的操作。

五.实战

  目前项目中正好用的为java8,可以尝试在项目中先用到,慢慢摸索。有待更新...........

 

原谅我这一生不羁放纵爱自由!
原文地址:https://www.cnblogs.com/zxfjava/p/9206808.html