JDK 1.8 核心新特性詳解
1. Lambda表達式
最核心的特性,簡化函數式編程,語法:(參數) -> 表達式
// 傳統方式
Runnable r1 = new Runnable() {@Overridepublic 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()
面試回答建議
回答時建議按以下結構組織:
- 核心特性:Lambda + Stream + 新日期API(必答)
- 配套機制:函數式接口 + 方法引用
- 擴展特性:Optional + 接口默認方法
- 實際應用:結合項目經驗舉例(如Stream處理數據集合)
?? 注意:避免死記硬背,重點理解每個特性的設計目的和使用場景
相關問題
- Lambda表達式與匿名內部類的本質區別是什么?
- 為什么Stream API能提升集合操作的性能?
- 新的日期時間API如何解決線程安全問題?
- 函數式接口中
@FunctionalInterface
注解的作用是什么? - Optional類在實際開發中有哪些使用陷阱?