zoukankan      html  css  js  c++  java
  • 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,可以尝试在项目中先用到,慢慢摸索。有待更新...........

     

    原谅我这一生不羁放纵爱自由!
  • 相关阅读:
    2020-10-03:java中satb和tlab有什么区别?
    2020-10-02:golang如何写一个插件?
    2020-10-01:谈谈golang的空结构体。
    2020-09-30:谈谈内存对齐。
    2020-09-29:介绍volatile功能。
    2020-09-28:内存屏障的汇编指令是啥?
    2020-09-27:总线锁的副作用是什么?
    2020-09-26:请问rust中的&和c++中的&有哪些区别?
    自定义刷新控件的实现原理
    scrollView的bounds
  • 原文地址:https://www.cnblogs.com/zxfjava/p/9206808.html
Copyright © 2011-2022 走看看