面试实战 问题二十六 JDK 1.8 核心新特性详解

发布于:2025-08-19 ⋅ 阅读:(18) ⋅ 点赞:(0)

JDK 1.8 核心新特性详解

1. Lambda表达式

最核心的特性,简化函数式编程,语法:(参数) -> 表达式

// 传统方式
Runnable r1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("传统方式");
    }
};

// Lambda方式
Runnable r2 = () -> System.out.println("Lambda方式");
  • 优势:减少模板代码,提高可读性
  • 应用场景:集合遍历、线程创建、事件处理
2. 函数式接口

使用@FunctionalInterface注解标记的单抽象方法接口,支持Lambda实现:

@FunctionalInterface
interface Converter<F, T> {
    T convert(F from);
}

// 使用
Converter<String, Integer> converter = (from) -> Integer.valueOf(from);
Integer result = converter.convert("123");

JDK内置四大核心函数接口:

  • Consumer<T>:消费型(有入参无返回值)
  • Supplier<T>:供给型(无入参有返回值)
  • Function<T,R>:函数型(有入参和返回值)
  • Predicate<T>:断言型(返回boolean)
3. 方法引用

Lambda的语法糖,直接引用已有方法:

// 静态方法引用
Function<String, Integer> f1 = Integer::parseInt;

// 实例方法引用
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(System.out::println);  // 等价于 x -> System.out.println(x)
4. Stream API

函数式数据处理管道,支持链式操作:

List<String> filtered = list.stream()
    .filter(s -> s.startsWith("a"))  // 过滤
    .map(String::toUpperCase)        // 转换
    .sorted()                        // 排序
    .collect(Collectors.toList());   // 收集结果
  • 核心操作
    • 中间操作:filter(), map(), sorted(), distinct()
    • 终止操作:collect(), forEach(), reduce(), count()
  • 并行处理parallelStream()自动利用多核
5. 新的日期时间API

解决旧Date/Calendar的线程安全问题:

LocalDate date = LocalDate.now(); // 日期 2023-07-21
LocalTime time = LocalTime.parse("10:15:30"); // 时间
LocalDateTime dt = date.atTime(time); // 组合

// 时区处理
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));

// 时间差计算
Duration duration = Duration.between(startTime, endTime);

包路径:java.time

6. 接口默认方法与静态方法

允许接口包含具体实现:

interface Vehicle {
    // 默认方法
    default void print() {
        System.out.println("我是一辆车!");
    }
    
    // 静态方法
    static void blowHorn() {
        System.out.println("按喇叭!!!");
    }
}
7. Optional类

解决空指针异常:

Optional<String> opt = Optional.ofNullable(getName());
opt.ifPresent(name -> System.out.println(name.length()));  // 非空时执行

String result = opt.orElse("default");  // 空值返回默认
8. 其他重要特性
  • 重复注解:同一位置多次使用相同注解
  • 类型注解:注解可应用于任何类型声明
  • Nashorn引擎:基于JavaScript的运行时环境
  • 并行数组操作Arrays.parallelSort()

面试回答建议

回答时建议按以下结构组织:

  1. 核心特性:Lambda + Stream + 新日期API(必答)
  2. 配套机制:函数式接口 + 方法引用
  3. 扩展特性:Optional + 接口默认方法
  4. 实际应用:结合项目经验举例(如Stream处理数据集合)

⚠️ 注意:避免死记硬背,重点理解每个特性的设计目的使用场景


相关问题

  1. Lambda表达式与匿名内部类的本质区别是什么?
  2. 为什么Stream API能提升集合操作的性能?
  3. 新的日期时间API如何解决线程安全问题?
  4. 函数式接口中@FunctionalInterface注解的作用是什么?
  5. Optional类在实际开发中有哪些使用陷阱?

网站公告

今日签到

点亮在社区的每一天
去签到