美文网首页
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-函数式编程

    函数式接口 ActionListener,Runnable,Comparator我们把这些只拥有一个方法(defa...

  • java8函数式编程内置函数小结

    java8函数式编程 Function

  • java8中的Stream

    java8提出的函数式编程旨在帮助程序猿们写出更优雅的代码,上文函数式编程基础也介绍了java8新提出的一些函数式...

  • Java函数式编程(待续)

    函数式编程概念 ​ 面向对象抽象数据,函数式编程抽象行为。---摘自《on java8》 ​ 下面是廖雪峰...

  • 一起来学Java8(一)——函数式编程

    在这篇文章中,我们将了解到在Java8下如何进行函数式编程。 函数式编程 所谓的函数式编程就是把函数名字当做值进行...

  • 函数式编程(一) lambda、FunctionalInterf

    由于函数式编程涉及内容较多,因此对函数式编程写一个系列博客,内容从JAVA8的新特性开始阐述,而后阐述函数式编程的...

  • 函数式编程与Lambda表达式

    函数式编程 什么是函数式编程这个问题一直困扰着我,直到最近花时间好好拜读了《Java8 函数式编程》这本书后有了一...

  • Java 函数式编程 之Lambada 表达式

    java8 中引入了函数式编程,带来了新的编程思维的转变,命令式编程得到了补充,相比较于市面上众多的函数式编程语言...

  • JAVA 8 forkjoin实际体验

    JAVA8 函数编程 -都说java8 新的函数式编程特别是并行流式编程,但是并行流的性能并不一定就好 没有很复杂...

  • Java8 - Lambda

    函数式编程在并发和事件驱动编程中优势明显。所以Java8引入了Lambda表达式的概念。 面向对象编程与函数式...

网友评论

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

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