函数式接口核心主线是“定义—规范—使用—典型代表”:一、定义需有且仅一个抽象方法,建议加@FunctionalInterface注解校验;二、JDK常用4个——Consumer(消费)、Supplier(产出)、Function(转换)、Predicate(判断);三、Lambda是其简洁实例化方式,依赖上下文类型推断;四、自定义时重语义命名、明泛型、忌强行函数式。

画函数式接口的思维导图,核心是抓住“定义—规范—使用—典型代表”这条主线,不堆砌概念,重逻辑关联和实际编码场景。下面分四块说清楚怎么组织内容:
一、函数式接口的定义与判定标准
这是导图最顶层的根节点。重点突出两个刚性条件:
- 接口中有且仅有一个抽象方法(默认方法、静态方法、Object类继承的方法都不算)
- 可选但强烈建议加 @FunctionalInterface 注解——它不是功能性的,而是编译期校验开关:加了就报错提醒你多写了抽象方法
举例对比更直观:Runnable 有 run();Comparator 有 compare();但 Serializable 没有抽象方法,就不是函数式接口。
二、JDK 内置常用函数式接口归类
不用全列,聚焦 java.util.function 包里高频使用的4个核心接口,按“输入→处理→输出”逻辑分组放二级分支:
立即学习“Java免费学习笔记(深入)”;
- Consumer<T>:只消费不返回,accept(T) —— 适合打印、存库、发消息等动作
- Supplier<T>:只产出不接收,get() —— 适合生成随机数、创建对象、读配置
- Function<T,R>:接收 T,返回 R,apply(T) —— 最常用,比如字符串转大写、数字加1
- Predicate<T>:接收 T,返回 boolean,test(T) —— 用于 filter、条件判断
每个接口旁可加一行小字备注典型用法,比如 Function 常配合 map(),Predicate 常配合 filter()。
三、Lambda 表达式与函数式接口的绑定关系
这是理解函数式编程的关键连接点,导图上建议用双向箭头或虚线强调:
- Lambda 本质就是函数式接口的实例化写法,不是新语法,而是匿名内部类的简洁替代
- 能写 new XxxInterface(){...} 的地方,基本都能换成 (x) -> {...}
- 类型推断靠上下文:比如 List<String>.stream().map(s -> s.length()),编译器自动知道 s 是 String,返回 int
四、自定义函数式接口的实用要点
导图末梢可放一个“动手提示”分支,避免纸上谈兵:
- 命名建议带 Fun/Action/Check 等语义后缀,如 StringTransformer、IdValidator
- 泛型参数要明确用途,比如 BiFunction<String,Integer,String> 表示双参单返的字符串操作
- 别为了“函数式”而强行改写——如果逻辑复杂、需复用、含状态,优先用普通类或方法
导图不必追求全覆盖,把这四块理顺,再配上1–2个简单代码片段(比如用 Function 实现 toUpperCase),就足够支撑日常开发和面试表达了。


















