# JAVA 8 學習心得 以前學的是JAVA6,到現階段8成為主流之後,是時候學習JAVA8的新特性了。 * ### stream 類似操作sql語法的操作效果,可以大量減少中間操作性的代碼量 > .stream() 回傳一個table (from table) .sorted() 將table的記錄作排序 .filter() 過濾方法,條件為真才保留 (where condition) .max/min/sum/average...etc 統計上的aggregation * ### interface可以有==實作== JAVA8使用default/static當成實作method的關鍵字,範例如下: ```java public interface MyFunctionalInterface2{ public void execute(); public default void print(String text) { System.out.println(text); } public static void print(String text, PrintWriter writer) throws IOException { writer.write(text); } } ``` **.static方法可由 ==InterfaceName.方法名稱()== 直接呼叫。** **.而default方法則由實作類別呼叫。實際例子如Iterable利用"default"來實作forEach,而其底下的實作類不需重新實作它。** * ### Functional Interfaces * 當定義的interface只有1個(且只有1個)未實作函式時,可以用lambda表達式來對它實作。 * 調用時用apply(參數),或直接用 lambda 的語法: input -> body 例如: ```java (arg1, arg2, arg3) -> System.out.println(arg1+arg2+arg3); ``` * Function / Supplier / Consumer / Predicate 內容如下: Function<T,R>: 1個參數T傳入,1個結果R回傳 Supplier<R>: 0個參數T傳入,1個結果R回傳 Consumer<T>: 1個參數T傳入,0個結果R回傳 Predicate<T>: 1個參數T傳入,1個布林值結果R回傳 * 函式前綴帶上Bi時,功能相同,但arguments由1個變為2個,例如 BiFunction<T1, T2, R> * Optional是一個容器類,旨在避免或釐清null在語音上的二義性:**執行異常** 或 **查無結果** * Optional.of()使用時機: * 當容器的對象不太可能為 null 時使用,發生 NullPointException 則視為 **執行異常**(系統異常)。 * Optional.ofNullable()使用時機: * 當容器的對象『有可能』為 null 時使用,發生 NoSuchElementException 則視為 **查無結果**(運作正常)。 * ifPresent() / .orElse() 等方法可用來實作 callback 內容。 ###### tags: `學習筆記` `JAVA`