一.Lambda 表达式
高频题及答案:
-
Lambda 和匿名内部类的区别?
-
匿名内部类语法冗长,必须写类名和方法名,Lambda 更简洁
(参数列表) -> 表达式/代码块
-
Lambda 可直接引用外部变量,支持函数式编程风格。
-
-
函数式接口是什么?如何用 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
-
-
Lambda 捕获外部变量有何限制?
-
捕获的外部变量必须是
final
或 实际上不变,否则编译报错。
-
二.Stream API
高频题及答案:
-
Stream 和 Collection 有何区别?
-
Collection 存储数据,Stream 不存数据,只是对数据源的计算流水线。
-
Stream 可以进行链式操作,延迟计算,提高效率。
-
-
常用操作有哪些?中间操作 vs 终止操作?
-
中间操作(lazy):
filter
,map
,sorted
,distinct
,不会立即执行。 -
终止操作(trigger):
collect
,forEach
,count
,reduce
,会触发计算。
-
-
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]
三. 默认方法 & 静态方法
高频题及答案:
-
接口为什么可以有默认方法?
-
解决接口扩展时破坏已有实现类的问题,可以在不改实现类的情况下增加新方法。
-
-
默认方法和抽象方法区别?
-
默认方法有方法体,可被实现类覆盖;抽象方法没有方法体,必须由实现类实现。
-
-
多继承接口冲突如何解决?
-
如果多个接口有相同默认方法,子类必须显式覆盖或使用
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 类
高频题及答案:
-
Optional 的作用?
-
避免 NullPointerException,明确表示可能为 null 的对象。
-
-
常用方法?
-
of(T value)
:创建非空 Optional,值为 null 抛异常 -
ofNullable(T value)
:允许值为 null -
isPresent()
:判断是否有值 -
orElse(T other)
:为空时提供默认值 -
ifPresent(Consumer)
:有值时执行函数
-
-
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)
高频题及答案:
-
与旧 Date/Calendar 的区别?
-
线程安全、不可变,设计清晰,支持链式操作
-
旧 API
Date
、Calendar
线程不安全,API 繁琐
-
-
LocalDate/LocalTime/LocalDateTime 怎么用?
LocalDate date = LocalDate.now(); LocalTime time = LocalTime.of(14, 30); LocalDateTime dateTime = LocalDateTime.of(date, time);
-
时间格式化/解析如何操作?
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String str = dateTime.format(formatter); LocalDateTime dt = LocalDateTime.parse(str, formatter);
-
日期计算
LocalDate tomorrow = date.plusDays(1); LocalDate lastWeek = date.minusWeeks(1);