跳转至

Java 8 的新特性

一、Lambda 表达式

Runnable r = () -> System.out.println("hello");
list.forEach(System.out::println);

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

二、Stream API

list.stream()
    .filter(x -> x > 0)
    .map(x -> x * 2)
    .collect(Collectors.toList());

集合处理:filter、map、reduce、collect。

三、Optional

Optional<String> opt = Optional.ofNullable(name);
String n = opt.orElse("default");

避免 NPE。

四、新日期 API

java.time 包:

LocalDate.now();
LocalTime.now();
LocalDateTime.of(2024, 1, 1);
Duration.between(t1, t2);
Period.between(d1, d2);

替代老旧的 Date、Calendar。

五、接口默认方法

interface MyInterface {
    default void hello() { System.out.println("hello"); }
}

接口可以有默认实现,不破坏实现类。

六、方法引用

list.forEach(System.out::println);
list.stream().map(String::toUpperCase);

:: 语法。

七、函数式接口

@FunctionalInterface

  • Function<T,R>
  • Consumer<T>
  • Supplier<T>
  • Predicate<T>

八、其他

1. 新工具类

  • Optional
  • Base64

2. HashMap 红黑树

链表长度 ≥ 8 树化。

3. ConcurrentHashMap

弃用 Segment,改为 CAS + synchronized。

4. 重复注解、类型注解

5. Nashorn JavaScript 引擎(已废弃)

九、JVM 变化

  • JVM 永久代被 Metaspace 取代。

十、总结

Java 8 是革命性版本:Lambda + Stream + Optional + 新日期 API 改变了 Java 的编程风格。

对比

  • Java 9:模块化、JShell。
  • Java 11:var、HTTP Client。
  • Java 17:switch 表达式、record、sealed。
  • Java 21:虚拟线程。