Java 8新特性 面试速查表(Lambda,Stream,Optional,LocalDate)

一.Lambda 表达式

高频题及答案:

  1. Lambda 和匿名内部类的区别?

    • 匿名内部类语法冗长,必须写类名和方法名,Lambda 更简洁 (参数列表) -> 表达式/代码块

    • Lambda 可直接引用外部变量,支持函数式编程风格。

  2. 函数式接口是什么?如何用 Lambda 实现?

    • 函数式接口:只有一个抽象方法的接口,可以使用 @FunctionalInterface 标注。

    • Lambda 可以作为该接口的实现,例如:

      @FunctionalInterface
      interface Calc { int add(int a, int b); }
      Calc c = (x, y) -> x + y;
      System.out.println(c.add(2,3)); // 5
      
  3. Lambda 捕获外部变量有何限制?

    • 捕获的外部变量必须是 final 或 实际上不变,否则编译报错。


二.Stream API

高频题及答案:

  1. Stream 和 Collection 有何区别?

    • Collection 存储数据,Stream 不存数据,只是对数据源的计算流水线。

    • Stream 可以进行链式操作,延迟计算,提高效率。

  2. 常用操作有哪些?中间操作 vs 终止操作?

    • 中间操作(lazy)filtermapsorteddistinct,不会立即执行。

    • 终止操作(trigger)collectforEachcountreduce,会触发计算。

  3. Stream 是否修改原集合?

    • 不修改原集合,所有操作返回新的 Stream 或集合。

示例:

List<Integer> list = Arrays.asList(1,2,3,4,5);
List<Integer> result = list.stream()
                           .filter(x -> x % 2 == 0)
                           .map(x -> x * 2)
                           .collect(Collectors.toList());
System.out.println(result); // [4, 8]

三. 默认方法 & 静态方法

高频题及答案:

  1. 接口为什么可以有默认方法?

    • 解决接口扩展时破坏已有实现类的问题,可以在不改实现类的情况下增加新方法。

  2. 默认方法和抽象方法区别?

    • 默认方法有方法体,可被实现类覆盖;抽象方法没有方法体,必须由实现类实现。

  3. 多继承接口冲突如何解决?

    • 如果多个接口有相同默认方法,子类必须显式覆盖或使用 InterfaceName.super.method() 调用。

示例:

interface A { default void hello(){ System.out.println("A"); } }
interface B { default void hello(){ System.out.println("B"); } }
class C implements A, B {
    public void hello(){ A.super.hello(); } // 指定调用哪个默认方法
}

四. Optional 类

高频题及答案:

  1. Optional 的作用?

    • 避免 NullPointerException,明确表示可能为 null 的对象。

  2. 常用方法?

    • of(T value):创建非空 Optional,值为 null 抛异常

    • ofNullable(T value):允许值为 null

    • isPresent():判断是否有值

    • orElse(T other):为空时提供默认值

    • ifPresent(Consumer):有值时执行函数

  3. Optional 是否可以为 null?

    • Optional 对象本身不能为 null,否则报 NPE,推荐使用 Optional.empty()

示例:

Optional<String> opt = Optional.ofNullable(null);
System.out.println(opt.orElse("default")); // default
opt.ifPresent(System.out::println); // 不打印

五. 新日期时间 API(java.time)

高频题及答案:

  1. 与旧 Date/Calendar 的区别?

    • 线程安全、不可变,设计清晰,支持链式操作

    • 旧 API DateCalendar 线程不安全,API 繁琐

  2. LocalDate/LocalTime/LocalDateTime 怎么用?

    LocalDate date = LocalDate.now();
    LocalTime time = LocalTime.of(14, 30);
    LocalDateTime dateTime = LocalDateTime.of(date, time);
    
  3. 时间格式化/解析如何操作?

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    String str = dateTime.format(formatter);
    LocalDateTime dt = LocalDateTime.parse(str, formatter);
    
  4. 日期计算

    LocalDate tomorrow = date.plusDays(1);
    LocalDate lastWeek = date.minusWeeks(1);
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值