一、函数式思想概述

面向对象思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情(重点在对象)
函数式编程思想:只要能获取到结果,怎么做的都不重要,重要在结果(不是很理解啊)

二、函数式接口

函数式接口指:有且仅有一个抽象方法的接口
函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可 以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导

三、函数式接口语法

  1. 修饰符 interface 接口名称 {
  2. public abstract 返回值类型 方法名称(可选参数信息);
  3. // 其他非抽象方法内容
  4. }

@FunctionalInterface注解
Java 8中专门为函数式接口引入了一个新的注解: @FunctionalInterface 。该注 解可用于一个接口的定义上:

  1. @FunctionalInterface
  2. public interface MyFunctionalInterface {
  3. void myMethod();
  4. }
  5. 注意:如果接口中只有一个接口,那么注解也可以省略

四、lambda表达式语法

2.1、初体验

  1. public class DemoOne {
  2. public static void main(String[] args) {
  3. //创建一个对象
  4. RunnableImpl run = new RunnableImpl();
  5. new Thread(run).start();
  6. //匿名内部类写法
  7. //匿名内部类本质是实现了接口的无名类
  8. new Thread(new Runnable() {
  9. @Override
  10. public void run() {
  11. System.out.println("一个线程创建啦");
  12. }
  13. }).start();
  14. //lambda表达式写法
  15. new Thread(() -> {
  16. System.out.println("*********一个线程创建啦");
  17. }).start();
  18. }
  19. }

2.2、语法

lamdba表达式的标准格式
参数
箭头
代码块

  1. (参数类型 参数名称) —> {代码语句}
  2. 小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
  3. -> 是新引入的语法格式,代表指向动作
  4. 大括号内的语法与传统方法体要求基本一致
  5. lambda表达式的简化写法
  6. 小括号内的参数类型可以省略
  7. 如果小括号内有且只有一个参数,则小括号可以省略
  8. 如果大括号内有且只有一个语句,则无论是否有返回值,可以省略大括号,return关键字以及语句分号
  1. @FunctionalInterface
  2. public interface Runnable {
  3. public abstract void run();
  4. }
  5. public class DemoOne {
  6. public static void main(String[] args) {
  7. //lambda表达式写法
  8. new Thread(() -> {
  9. System.out.println("*********一个线程创建啦");
  10. }).start();
  11. }
  12. }
  13. () -> {}
  14. () - 代表run方法中的参数
  15. {} - 代表run方法的实现
  16. 抛开实现原理不说,Java中的Lambda表达式可以被当作是匿名内部类的替代品。如果方法的参数是一个函数
  17. 式接口类型,那么就可以使用Lambda表达式进行替代。使用Lambda表达式作为方法参数,其实就是使用函数式
  18. 接口作为方法参数。