【JDK版本】JDK1.8相比JDK1.7 语言特性之函数式编程

Lambda 表达式(语法革命)

1.7: 必须编写繁琐的匿名内部类

java 复制代码
// JDK 1.7
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Hello World");
    }
});

1.8:Lambda 语法,代码量减少 70%

java 复制代码
// JDK 1.8
button.addActionListener(e -> System.out.println("Hello World"));

底层原理:

1、基于invokedynamic指令动态生成函数式接口实例

2、延迟执行,运行时优化,性能优于匿名内部类

3、性能提升,减少类加载,字节码更简洁

Stream API(集合处理范式转变)

1.7:外部迭代,代码冗长

java 复制代码
// 1.7 循环遍历
List<String> result = new ArrayList<>();
for (String s : list) {
    if (s.startsWith("a")) {
        result.add(s.toUpperCase());
    }
}

1.8:声明式流水线处理,支持并行计算

java 复制代码
// 1.8 Stream 流水线
List<String> result = list.stream().filter(s -> s.startsWith("a"))
    .map(String::toUpperCase).collect(Collectors.toList());

核心优势:
1.惰性求值 :中间操作不执行,直到终端操作才处理
2.并行优化 :.parallel() 自动利用多核,性能提升 2-5 倍
3.代码可读性:逻辑链式表达,意图更清晰

接口默认方法(演化性设计)

1.7 :接口不能包含实现,修改接口需改动所有实现类
1.8:接口可包含默认实现,实现类无需修改

java 复制代码
public interface List<E> {
    // 新增默认方法,不影响已有实现类
    default void sort(Comparator<? super E> c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);
        // ...
    }
}

重大意义:解决了接口演化问题,JDK 可在不破坏兼容性的前提下扩展 API

新日期时间 API(JSR-310)

1.7:Date/Calendar 线程不安全、设计混乱

java 复制代码
// 1.7 线程不安全
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 多线程下会抛出 NumberFormatException

1.8:LocalDateTime 等不可变类,线程安全

java 复制代码
// 1.8 不可变、线程安全
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String dateStr = now.format(formatter);

优势:
不可变性 :线程安全,无副作用
流畅 API :方法链调用,如 now.plusDays(1).minusHours(2)
时区支持:ZoneDateTime 彻底解决时区问题

Optional 类(空指针终结者)

1.7:NPE 防不胜防

java 复制代码
// 1.7 需要层层判空
if (user != null) {
    Address address = user.getAddress();
    if (address != null) {
        String city = address.getCity();
    }
}

1.8:Optional 链式调用,优雅避空

java 复制代码
// 1.8 一行代码安全获取
String city = Optional.ofNullable(user)
    .map(User::getAddress)
    .map(Address::getCity)
    .orElse("Unknown");
相关推荐
mldong4 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾14 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
南棱笑笑生5 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
问天_观心5 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
洋洋不叫杨杨5 小时前
揭秘当下知名的SEO优化渠道,你知道几个?
大数据·python
zhanghe6875 小时前
es的密码带有特殊字符,导出
java
阿童木写作5 小时前
跨境图片翻译工具推荐:批量处理视频字幕与智能抠图
python·音视频
平头哥技术团队5 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
pnoker5 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
乌萨奇也要立志学C++5 小时前
【洛谷】kmp算法
开发语言·算法