Skip to content

Java 8 版本特性

Java 8 的新特性主要围绕函数式编程、集合数据处理、日期与时间 API 的改进展开,使开发者可以更高效、更优雅地完成日常任务。推荐深入学习这些特性,以更好地利用 Java 8 提升项目开发效率。

Lambda 表达式

Lambda 表达式为 Java 引入了函数式编程的能力,简化了代码编写。

语法

java
(parameters) -> expression
(parameters) -> { statements; }

示例

java
// 传统匿名类
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("传统方式");
    }
}).start();

// 使用 Lambda 表达式
new Thread(() -> System.out.println("Lambda 表达式")).start();

函数式接口

  • 函数式接口是只有一个抽象方法的接口,可用于 Lambda 表达式。
  • 通过注解 @FunctionalInterface 明确指定。

常用内置函数式接口

接口抽象方法用途
Predicate<T>boolean test(T t)条件判断
Function<T, R>R apply(T t)输入转换为输出
Consumer<T>void accept(T t)对输入执行操作
Supplier<T>T get()提供结果,无输入参数
BiFunction<T, U, R>R apply(T t, U u)两个输入,返回一个结果

示例

java
Predicate<Integer> isPositive = x -> x > 0;
System.out.println(isPositive.test(5)); // 输出 true

方法引用

方法引用是 Lambda 表达式的简化形式,用于直接引用现有方法。

类型

  1. 静态方法引用:ClassName::methodName
  2. 实例方法引用:instance::methodName
  3. 特定类型实例方法引用:ClassName::methodName
  4. 构造器引用:ClassName::new

示例

java
// 静态方法引用
Function<String, Integer> parseInt = Integer::parseInt;
System.out.println(parseInt.apply("123")); // 输出 123

// 构造器引用
Supplier<List<String>> listSupplier = ArrayList::new;
List<String> list = listSupplier.get();

Stream API

Stream API 提供了一种函数式风格的数据处理方式,用于处理集合或数组。

核心方法

方法描述
filter过滤元素
map转换元素
collect收集处理结果
forEach遍历流中的元素
reduce归约操作,合并元素
sorted对流中的元素排序

示例

java
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> filteredNames = names.stream()
    .filter(name -> name.startsWith("A"))
    .map(String::toUpperCase)
    .collect(Collectors.toList());

System.out.println(filteredNames); // 输出 [ALICE]

Optional 类

Optional 是一个容器类,用于避免 null 带来的空指针异常。

常用方法

  • ofNullable(T value):可以接受 null
  • isPresent():检查是否有值。
  • orElse(T other):当值为空时返回默认值。
  • ifPresent(Consumer<? super T> action):对值执行操作。

示例

java
Optional<String> optional = Optional.ofNullable(null);
System.out.println(optional.orElse("默认值")); // 输出 "默认值"

默认方法与静态方法

  • 接口可以有默认实现方法(default 修饰)。
  • 接口可以有静态方法。

示例

java
interface Vehicle {
    default void start() {
        System.out.println("默认启动方法");
    }

    static void stop() {
        System.out.println("静态方法停止");
    }
}

class Car implements Vehicle {}

Car car = new Car();
car.start(); // 输出 "默认启动方法"
Vehicle.stop(); // 输出 "静态方法停止"

新的日期与时间 API

Java 8 引入了新的日期和时间 API,提供了更强大的功能和简洁的用法。

常用类

描述
LocalDate表示日期
LocalTime表示时间
LocalDateTime表示日期和时间
ZonedDateTime表示带时区的日期和时间

示例

java
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();

System.out.println(date);      // 如:2024-12-13
System.out.println(time);      // 如:14:30:00.123
System.out.println(dateTime);  // 如:2024-12-13T14:30:00.123

其他改进

  • java.util.function 函数库:提供了大量的函数式接口。
  • 并行数组操作:Arrays.parallelSort
  • Base64 编码:java.util.Base64 提供了简洁的 Base64 操作。

示例(Base64 编码)

java
String encoded = Base64.getEncoder().encodeToString("Hello".getBytes());
System.out.println(encoded); // 输出 "SGVsbG8="
编程洪同学服务平台是一个广泛收集编程相关内容和资源,旨在满足编程爱好者和专业开发人员的需求的网站。无论您是初学者还是经验丰富的开发者,都可以在这里找到有用的信息和资料,我们将助您提升编程技能和知识。
专业开发
高端定制
售后无忧
站内资源均为本站制作或收集于互联网等平台,如有侵权,请第一时间联系本站,敬请谅解!本站资源仅限于学习与参考,严禁用于各种非法活动,否则后果自行负责,本站概不承担!