JDK8:Lambda、Stream、函数式接口、Optional

JDK8 四大核心新特性:Lambda、Stream、函数式接口、Optional 精讲

一、Lambda 表达式

作用

简化匿名内部类写法,替代单行接口实现,让代码更简洁优雅。

语法

(参数列表) -> 方法体

特点

  1. 可省略参数类型、小括号、大括号、return
  2. 只能用于函数式接口
  3. 支持访问局部变量(隐式final)

示例

// 传统写法
Runnable r1 = new Runnable() {@Overridepublic void run() {System.out.println("传统线程");}
};// Lambda写法
Runnable r2 = () -> System.out.println("Lambda线程");

二、函数式接口

定义

有且仅有一个抽象方法的接口,可被 Lambda 使用。

核心注解

@FunctionalInterface 强制校验是否为函数式接口

JDK8 内置四大核心接口

  1. Consumer 消费型:有参无返回
  2. Supplier 供给型:无参有返回
  3. Function<T,R> 函数型:有参有返回
  4. Predicate 断言型:有参,返回布尔值

三、Stream 流

作用

集合、数组流式计算:遍历、过滤、排序、映射、统计、聚合,替代繁琐循环。

三阶段

  1. 创建流:集合.stream() / Arrays.stream()
  2. 中间操作:filter、map、sorted、limit(延迟执行)
  3. 终端操作:forEach、collect、count、max(触发执行)

常用示例

list.stream().filter(x -> x > 10)    // 过滤.map(x -> x * 2)        // 映射.sorted()               // 排序.forEach(System.out::println); // 遍历输出

特点

  • 不修改原集合
  • 中间操作链式调用,惰性求值
  • 支持并行流 parallelStream()

四、Optional 类

作用

解决空指针 NullPointerException,优雅判空,替代大量 if(null != obj)。

常用方法

  • Optional.ofNullable(obj) 构建可空对象
  • isPresent() 判断是否非空
  • orElse() 为空给默认值
  • orElseGet() 为空执行逻辑
  • ifPresent() 非空才执行操作

示例

String name = null;
Optional.ofNullable(name).ifPresent(System.out::println);

一句话串联记忆

函数式接口是基础,Lambda 简化写法;Stream 做集合流式处理,Optional 专治空指针。