1. 什么是函数式接口
  2. 为什么要用函数式接口
  3. java.util.function和其他的函数式接口
  4. lamdba表达式
  5. 方法引用
  6. 流 Stream

1 什么是函数式接口

用@FunctionInterface注解的接口是函数式接口,那么不用@FunctionInterface注解的接口是不是函数式接口?什么接口能用@FunctionInterface注解呢?

函数式接口满足一个条件,只有一个抽象方法。在JDK的API中的,只有一个抽象方法的接口可以用@FunctionInterface注解。

2 为什么要用函数式接口

答案是为了行为参数化:行为参数化是为了让你处理频繁变更需求的一种软件开发模式,将变化的代码块抽离成一个行为,当做一个参数隔离出来。在开闭原则上,将容易变化的行为隔离出来,面向对象会要求你将隔离出来的行为进行抽象。

函数式接口即为这部分抽象,将变化抽象出来。为什么函数式接口只允许有一个抽象方法存在呢,为了使用lambda表达式。

3 java.util.function和其他的函数式接口

其他的函数式接口Runnable,Callable,Comparator以及java.util.function包下的Function,Predicate,Supplier,Consumer

  3.1 java.util.function.Predicate

  Predicate<T> 中只有一个抽象方法--boolean test(T t);

  3.2 java.util.function.Consumer

  Consumer<T>中有一个抽象方法 void accept(T t);接受一个泛型对象,返回一个空,消费此对象。

  3.3 java.util.function.Function

  Function<T,R>中有一个抽象方法 R  apply (T t);接受一个T对象,转换为一个R对象。Stream的map即为词原理,public static <T,R> List<R> map(List<T> list,Function<T,R> f),

这儿在使用此map方法的时候,lambda表达式是实现函数式接口Function<T,R>的apply方法,默认将T对象转换为R对象,Stream的泛型value在apply得到了fill。

  3.4 java.util.function.Supplier

  Supplier<T> 接口中有一个抽象方法  T get(); 参数为空,返回一个T对象,生产者。

4 lamdba表达式

  在所有指定方法参数为行为参数化的函数式接口中,都可以使用lamdba的方式进行调用   (函数式接口中唯一抽象方法的参数) -> {此抽象方法的实现},如果是一行代码可以去掉大括号

5 方法引用

  6.1 构造方法调用

  6.2静态方法的调用

  6.3实例方法的调用

6 流 Stream

  “集合谈的是数据,流讲的是计算”

  流的操作:筛选、切片、映射、查找、匹配和归约

函数式接口java.util.function的更多相关文章

  1. JAVA8的java.util.function包 @FunctionalInterface

    1 函数式接口java.util.function https://www.cnblogs.com/CobwebSong/p/9593313.html 2 JAVA8的java.util.functi ...

  2. Function接口 – Java8中java.util.function包下的函数式接口

    Introduction to Functional Interfaces – A concept recreated in Java 8 Any java developer around the ...

  3. 深入学习Java8 Lambda (default method, lambda, function reference, java.util.function 包)

    Java 8 Lambda .MethodReference.function包 多年前,学校讲述C#时,就已经知道有Lambda,也惊喜于它的方便,将函数式编程方式和面向对象式编程基于一身.此外在使 ...

  4. 函数式接口的使用 (Function、Predicate、Supplier、Consumer)

    参考:https://blog.csdn.net/jmj18756235518/article/details/81490966 函数式接口 定义:有且只有一个抽象方法的接口 Function< ...

  5. 接口java.util.Map的四个实现类HashMap Hashtable LinkedHashMap TreeMap

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别 :java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMa ...

  6. JAVA8的java.util.function包

    一 概述 name type description Consumer Consumer< T > 接收T对象,不返回值 Predicate Predicate< T > 接收 ...

  7. java.util.function 中的 Function、Predicate、Consumer

    函数式接口: 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但可以有多个非抽象方法的接口. 函数式接口可以被隐式转换为 Lambda 表达式. Function ...

  8. 学习并发包常用的接口----java.util.concurrent

    1.常用的相关的接口 Callable.(Runnable).Futrue.RunnableFuture.RunnableSheduledFuture.ScheduledFuture.Executor ...

  9. Java 8函数式接口functional interface的秘密

    Java 8函数式接口functional interface的秘密 2014年10月29日 17:52:55 西瓜可乐520 阅读数:3729   目录 [−] JDK 8之前已有的函数式接口 新定 ...

随机推荐

  1. pytest + allure 生成测试报告

    pytest测试样例规则:测试文件以test_开头(以_test结尾也可以)测试类以Test开头,并且不能带有 init 方法测试函数以test_开头断言使用基本的assert即可 ubuntu 安装 ...

  2. Eclipse4.9集成Tomcat 9.0.21详细版

    1.下载Tomcat 从Tomcat官网下载:https://tomcat.apache.org 此处我下载的版本是Tomcat 7.0.94 下载完毕后解压即可,我解压后的路径是D:\soft\ap ...

  3. SpringMVC实现文件下载的两种方式及多文件下载

    1.传统方法 @RequestMapping("/download") public String download( String fileName ,String filePa ...

  4. ubuntu之路——day17.4 卷积神经网络示例

    以上是一个识别手写数字的示例 在这个示例中使用了两个卷积-池化层,三个全连接层和最后的softmax输出层 一般而言,CNN的构成就是由数个卷积层紧跟池化层再加上数个全连接层和输出层来构建网络. 在上 ...

  5. Spring Cloud Hystrix基本原理

    本篇学习Spring Cloud家族中的重要成员:Hystrix.分布式系统中一个服务可能依赖着很多其他服务,在高并发的场景下,如何保证依赖的某些服务如果出了问题不会导致主服务宕机这个问题就会变得异常 ...

  6. Java NIO Buffer详解

    一.ByteBuffer类型化的put与get方法 /** * ByteBuffer类型化的put与get方法 */ public class NioTest5 { public static voi ...

  7. hive分区与实际分区文件不匹配导致spark读文件出错的问题解决

    先解释下,由于历史原因导致hive中的看到分区比hdfs中的文件夹不匹配,存在hive中分区数有,实际hdfs中无此文件夹. spark中通过sparkSQL读取hive中的该表时,将会出现异常. 解 ...

  8. PHPUnit 单元测试教程

    一.官网下载对应 PHP 版本的代码库 https://phpunit.de/getting-started-with-phpunit.html 二.安装 PHPUnit 官网提供了两种方法安装 1. ...

  9. 1093 - You can't specify target table 'account' for update in FROM clause

    目的:查询一张表的相同的两条数据,并删除一条数据. 分析 先查询出相同的数据,然后删除 查询相同的数据 SELECT a.id FROM account a GROUP BY a.username H ...

  10. osgearth显示中文标签

    首先将带有中文的字符串转换成string void unicodeToUTF8(const wstring &src, string& result){int n = WideChar ...