AIGC标识 Java8新特性

Java8 核心高频新特性(Lambda / Stream / Optional / 新时间API)

精选面试与开发最常用4个特性,附带原理说明与可运行Demo代码

目录


1. Lambda表达式

说明:简化只有一个抽象方法接口的匿名内部类写法,可以将代码块作为参数传递。
语法:(参数列表) -> {方法体}

public class LambdaDemo {
    public static void main(String[] args) {
        // 传统匿名内部类写法
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("传统匿名内部类");
            }
        };

        // Lambda简写
        Runnable r2 = () -> System.out.println("Lambda表达式写法");
        r2.run();
    }
}

代码解释:接口仅有单个抽象方法时,就可以使用 Lambda;JVM 自动推导参数类型,简化样板代码。

2. Stream API 流式处理

说明:Java8引入的集合声明式链式编程API,核心特点惰性求值。

  • 中间操作:filter、map、sorted、distinct,仅定义处理规则,不会立即执行,返回新Stream。
  • 终止操作:collect、forEach、count、anyMatch,触发流执行,流执行完成后不可复用。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamDemo {
    public static void main(String[] args) {
        List<String> source = Arrays.asList("java", null, "spring", "vue", "jvm");
        List<String> result = source.stream()
                .filter(item -> item != null)               //过滤null元素
                .filter(item -> item.length() > 3)          //过滤长度大于3的字符串
                .map(String::toUpperCase)                   //全部转为大写
                .collect(Collectors.toList());              //收集结果为List

        System.out.println(result);
    }
}

代码解释:链式调用只是组装处理规则,只有调用终止操作collect()才会真正遍历执行;不会修改原集合;parallelStream()可开启并行流,需要注意线程安全。

3. Optional 空指针容器

说明:Java8新增,用于包装对象,强制开发者主动处理空场景;不能彻底消灭NPE(Optional引用本身可以为null)。

编码规范:推荐作为方法返回值;不建议作为成员变量、方法入参。

import java.util.Optional;

public class OptionalDemo {
    static class User {
        private String name;
        public User(String name) { this.name = name; }
        public String getName() { return name; }
    }

    public static void main(String[] args) {
        User user = null;
        Optional<User> optUser = Optional.ofNullable(user);
        String userName = optUser.map(User::getName)
                .orElse("默认用户名");
        System.out.println(userName);
    }
}

常用方法:

  • ofN- ofNullable ()`:最常用,支持传入 null
  • orElse():无论对象是否为空,内部代码都会执行
  • orElseGet():仅当为空时才执行,推荐优先使用
  • ifPresent():对象非空才执行回调逻辑

4. 全新时间API java.time包

说明:Java8新增时间API。旧Date、SimpleDateFormat可变,线程不安全;java.time包下所有类不可变、线程安全。
核心类:

  • LocalDate:只包含日期(年月日)
  • LocalTime:只包含时间(时分秒)
  • LocalDateTime:日期+时间
  • DateTimeFormatter:线程安全的格式化工具
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class TimeDemo {
    public static void main(String[] args) {
        // 获取当前日期
        LocalDate today = LocalDate.now();
        System.out.println("当前日期:" + today);

        // 获取当前日期时间
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String timeStr = now.format(formatter);
        System.out.println("格式化时间:" + timeStr);
    }
}
posted @ 2026-09-26 13:56  赵登科  阅读(3)  评论(0)    收藏  举报