Java 8 新特性介绍

目录

[1. Lambda 表达式](#1. Lambda 表达式)

[2. 函数式接口](#2. 函数式接口)

[3. Stream API](#3. Stream API)

[4. 方法引用](#4. 方法引用)

[5. 默认方法](#5. 默认方法)

[6. Optional 类](#6. Optional 类)

[7. 新的日期时间 API](#7. 新的日期时间 API)

[8. 并行数组排序](#8. 并行数组排序)

总结


Java 8 引入了多项革命性特性,显著提升了开发效率和代码可读性。以下是核心特性及代码示例:


1. Lambda 表达式

简化函数式编程,替代匿名内部类。

java 复制代码
// 传统写法
Runnable r1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello");
    }
};

// Lambda 写法
Runnable r2 = () -> System.out.println("Hello");

2. 函数式接口

使用 @FunctionalInterface 注解标记仅含一个抽象方法的接口。

java 复制代码
@FunctionalInterface
interface MathOperation {
    int operate(int a, int b);  // 唯一抽象方法
}

public static void main(String[] args) {
    MathOperation add = (a, b) -> a + b;  // Lambda 实现
    System.out.println(add.operate(5, 3));  // 输出 8
}

3. Stream API

提供声明式数据集合处理能力。

java 复制代码
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

// 过滤并输出长度>3的名字
names.stream()
     .filter(name -> name.length() > 3)
     .forEach(System.out::println);  // 输出 Alice, Charlie

4. 方法引用

简化 Lambda 表达式,通过 :: 操作符引用方法。

java 复制代码
List<Integer> numbers = Arrays.asList(1, 2, 3);

// 传统 Lambda
numbers.forEach(x -> System.out.println(x));

// 方法引用
numbers.forEach(System.out::println);  // 等效写法

5. 默认方法

允许在接口中定义默认实现,避免破坏现有代码。

java 复制代码
interface Vehicle {
    default void start() {  // 默认方法
        System.out.println("Engine started");
    }
}

class Car implements Vehicle {
    // 无需重写 start()
}

public static void main(String[] args) {
    new Car().start();  // 输出 "Engine started"
}

6. Optional 类

优雅处理 null 值,减少空指针异常。

java 复制代码
Optional<String> name = Optional.ofNullable(getName());  // 可能为 null 的方法

// 安全取值
String result = name.orElse("Default");
System.out.println(result);  // 若非空则输出值,否则输出 "Default"

7. 新的日期时间 API

java.time 包解决旧 Date 类的线程安全问题。

java 复制代码
// 获取当前日期
LocalDate today = LocalDate.now();
System.out.println(today);  // 输出如 2023-10-05

// 日期计算
LocalDate nextWeek = today.plusWeeks(1);
System.out.println(nextWeek);  // 输出 2023-10-12

8. 并行数组排序

利用多核处理器加速排序。

java 复制代码
int[] numbers = {5, 3, 9, 1, 7};

// 单线程排序
Arrays.sort(numbers); 

// 并行排序(大数据量时更快)
Arrays.parallelSort(numbers); 

总结

Java 8 通过 Lambda、Stream、函数式接口等特性实现了:

  • 代码简洁性:减少模板代码(如匿名内部类)
  • 并发优化:Stream 并行处理提升性能
  • 健壮性:Optional 减少空指针异常
  • 现代化:日期 API 修复设计缺陷

这些特性使 Java 更适合现代高并发、函数式编程场景。

相关推荐
for_ever_love__26 分钟前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
java资料站30 分钟前
五、Spring AI Alibaba · Memory · Saver(短期会话)
java·spring·microsoft
夜之眷属1 小时前
Core dump 崩溃排查:JVM 宕机后,那份 core 文件怎么用 gdb 还原现场
java·运维·服务器·jvm
波加曼大王2 小时前
# vLLM不要迷信PagedAttention神话,聊聊线上藏着的内部碎片陷阱
java·架构
SL_staff2 小时前
目标健康度自检清单:开发者视角下的目标-计划-任务链路断点诊断
java·开源·github
for_ever_love__2 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
神仙别闹2 小时前
基于C++实现的贪吃蛇游戏平台
java·c++·游戏
布吉岛的石头2 小时前
Java 程序员第 49 阶段11:Java 接 BERT:用 ONNX Runtime 做句向量推理
java·人工智能·python·深度学习·bert·transformer
niucloud-admin2 小时前
JAVA V6 多商户商城 开发文档——JAVA服务端
java·开发语言
alexlifexyz2 小时前
写了个 Claude Code 插件:AI 写的 Java 违反阿里规约,就写不进文件
java