美文网首页
java8 lambda-1-函数式编程

java8 lambda-1-函数式编程

作者: 宠辱不惊的咸鱼 | 来源:发表于2019-10-01 09:19 被阅读0次

    函数式接口

    • ActionListener,Runnable,Comparator
      • 我们把这些只拥有一个方法(default和static方法除外)的接口称为函数式接口,之前它们被称为SAM类型,即单抽象方法类型(Single Abstract Method)
      • 我们并不需要额外的工作来声明一个接口是函数式接口:编译器会根据接口的结构自行判断(判断过程并非简单的对接口方法计数:一个接口可能冗余的定义了一个Object已经提供的方法,比如toString(),或者定义了static方法或default方法,这些都不属于函数式接口方法的范畴)。
    • @FunctionalInterface注解
      • API作者们可以通过该注解来显式指定一个接口是函数式接口(以避免无意声明了一个符合函数式标准的接口),加上这个注解之后,编译器就会验证该接口是否满足函数式接口的要求。

    Java SE7的函数式接口

    • Java SE 7的现有的类库大量使用了函数式接口,通过沿用这种模式,我们使得现有类库能够直接使用lambda表达式。例如下面是Java SE 7中已经存在的函数式接口:
      • java.lang.Runnable
      • java.util.concurrent.Callable
      • java.security.PrivilegedAction
      • java.util.Comparator
      • java.io.FileFilter
      • java.beans.PropertyChangeListener

    Java SE8的新增函数式接口

    • Java SE 8中增加了一个新的包:java.util.function,它里面包含了常用的函数式接口,例如:
      • Predicate<T>——接收T对象并返回boolean
      • Consumer<T>——接收T对象,不返回值
      • Function<T, R>——接收T对象,返回R对象
      • Supplier<T>——提供T对象(例如工厂),不接收值
      • UnaryOperator<T>——接收T对象,返回T对象
      • BinaryOperator<T>——接收两个T对象,返回T对象

    特化函数式接口

    • 除了上面的这些基本的函数式接口,我们还提供了一些针对原始类型(Primitive type)的特化(Specialization)函数式接口,例如IntSupplier和LongBinaryOperator。(我们只为int、long和double提供了特化函数式接口,如果需要使用其它原始类型则需要进行类型转换)同样的我们也提供了一些针对多个参数的函数式接口,例如BiFunction<T, U, R>,它接收T对象和U对象,返回R对象。

    相关文章

      网友评论

          本文标题:java8 lambda-1-函数式编程

          本文链接:https://www.haomeiwen.com/subject/xglkpctx.html