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. eclipseWeb项目如何实现网址发送给外人——内部穿透

    教程:https://blog.csdn.net/Feihongxiansen/article/details/94480480 部署完成后: 打开cmd命令: 暴露端口8081成功: 将eclips ...

  2. 微信小程序之上传图片(含前后端代码例子)

    此代码示例,能够让你成功将图片上传至后端,后端做相应的处理,然后返回成功码. 前端小程序代码 index.wxml: <view class='content'> <view cla ...

  3. OO助教的退休感想

    深夜失眠+刚赶完火车的胡言乱语,切莫当真,择日修改 一年前,我在学姐的怂恿鼓励下,加上了吴老师的微信,表达了想担任下学期的OO助教的想法.三天后,我到新主楼参加OO助教的面试,其实还是蛮紧张的,毕竟自 ...

  4. js - 常用工具集功能函数

    Note [普通JSON数组插入指定位置并且合并] let arr = [{ a: 11 }, { a: 11 }, { a: 11 }, { a: 117 }, { a: 11 }, { a: 11 ...

  5. LZW

    LZW https://www2.cs.duke.edu/csed/curious/compression/lzw.html https://www.golangprograms.com/golang ...

  6. Java地址:

    GitHub:https://github.com/nanchen2251 个人博客:https://nanchen2251.github.io/ 简书地址:http://www.jianshu.co ...

  7. JDBC连接抽象方法的使用例子

    package com.zdlt.auth.api.base.datasource; import java.sql.*; import java.util.ArrayList; import jav ...

  8. JS的base64编码解码

    Unicode问题解法 有个小坑是它只支持ASCII. 如果你调用btoa("中文")会报错: Uncaught DOMException: Failed to execute ' ...

  9. Selenium+Java完整框架搭建(2019完整版)

    一.WebDriver框架开发实战 1.框架的思想 (1)什么是框架? 框架是可以被应用开发者定制的应用骨架 (2)为什么要写框架? 提高脚本可维护性 提高编写脚本的速度 提高脚本可阅读性 (3)框架 ...

  10. Python3基础 import...as 给导入的模块起别名

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...