499 words
2 minutes
Java SE 系列(十):Java8 新特性

AI 智能总结

Java8 新特性:Lambda、函数式接口、Stream、Optional#

Java8 是里程碑版本,核心四大特性大幅简化代码、消灭冗余模板代码,是日常开发、框架源码的主流写法。

一、函数式接口#

仅有一个抽象方法的接口,是 Lambda 表达式的前提。 核心注解 @FunctionalInterface,用于校验接口合法性。 常用内置接口:

  • Consumer 消费型:无返回值
  • Supplier 供给型:无参数有返回值
  • Function 函数型:有参数有返回值
  • Predicate 断言型:返回布尔值
// Consumer:接收参数消费,无返回
Consumer<String> printer = s -> System.out.println(s);
printer.accept("Hello");
// Supplier:提供对象,无参数
Supplier<Double> random = () -> Math.random();
Double num = random.get();
// Function:转换,输入一个出一个
Function<Integer, String> int2Str = i -> String.valueOf(i);
String s = int2Str.apply(100);
// Predicate:条件判断,返回布尔
Predicate<Integer> isPositive = i -> i > 0;
boolean result = isPositive.test(5);

二、Lambda 表达式#

简化函数式接口的匿名内部类写法,语法:(参数) -> {代码体}

// 传统写法
new Runnable(){
@Override
public void run() {
System.out.println("传统线程");
}
};
// Lambda极简写法
new Thread(() -> System.out.println("Lambda线程")).start();

三、Stream 流式编程#

用于集合数据链式处理,替代循环遍历,代码简洁优雅。 分为三步:获取流 → 中间操作 → 终止操作

  • 中间操作:过滤、排序、映射(延迟执行)
  • 终止操作:触发执行、收集结果
List<String> list = Arrays.asList("Java","Python","Go");
// 过滤长度大于3的元素并收集
List<String> res = list.stream()
.filter(s -> s.length() > 3)
.collect(Collectors.toList());
System.out.println(res);

四、Optional 空安全工具#

杜绝 NullPointerException,优雅处理空对象判断。

String str = null;
// 空值安全获取,为空返回默认值
String result = Optional.ofNullable(str).orElse("默认值");
System.out.println(result);

核心总结#

  1. 函数式接口是 Lambda 的基础,单一抽象方法是硬性规则。
  2. Lambda 简化匿名内部类,让代码更精简,只关注核心逻辑。
  3. Stream 替代传统 for 循环,链式操作高效处理集合数据。
  4. Optional 规避空指针异常,摒弃繁琐的 if(null != obj) 判断。
Java SE 系列(十):Java8 新特性
https://fuwari.vercel.app/posts/java-se-series/java-se-10-java8/
Author
Zero02
Published at
2025-03-09
License
CC BY-NC-SA 4.0