天天看點

【Java8新特性】知識點總結,你都會了嗎?

Java7與Java8中的HashMap

  • JDK7 HashMap結構為數組+連結清單(發生元素碰撞時,會将新元素添加到連結清單開頭)
  • JDK8 HashMap結構為數組+連結清單+紅黑樹(發生元素碰撞時,會将新元素添加到連結清單末尾,當HashMap總容量大于等于64,并且某個連結清單的大小大于等于8,會将連結清單轉化為紅黑樹(注意:紅黑樹是二叉樹的一種))

JDK8 HashMap重排序

如果删除了HashMap中紅黑樹的某個元素導緻元素重排序時,不需要計算待重排序的元素的HashCode碼,隻需要将目前元素放到(HashMap總長度+目前元素在HashMap中的位置)的位置即可。

篩選與切片

  • filter——接收 Lambda , 從流中排除某些元素。
  • limit——截斷流,使其元素不超過給定數量。
  • skip(n) —— 跳過元素,傳回一個扔掉了前 n 個元素的流。若流中元素不足 n 個,則傳回一個空流。與 limit(n) 互補
  • distinct——篩選,通過流所生成元素的 hashCode() 和 equals() 去除重複元素

中間操作

  • map——接收 Lambda , 将元素轉換成其他形式或提取資訊。接收一個函數作為參數,該函數會被應用到每個元素上,并将其映射成一個新的元素。
  • flatMap——接收一個函數作為參數,将流中的每個值都換成另一個流,然後把所有流連接配接成一個流
  • sorted()——自然排序
  • sorted(Comparator com)——定制排序

終止操作

  • allMatch——檢查是否比對所有元素
  • anyMatch——檢查是否至少比對一個元素
  • noneMatch——檢查是否沒有比對的元素
  • findFirst——傳回第一個元素
  • findAny——傳回目前流中的任意元素
  • count——傳回流中元素的總個數
  • max——傳回流中最大值
  • min——傳回流中最小值

歸約

  • reduce(T identity, BinaryOperator) / reduce(BinaryOperator) ——可以将流中元素反複結合起來,得到一個值。
  • collect——将流轉換為其他形式。接收一個 Collector接口的實作,用于給Stream中元素做彙總的方法

注意:流進行了終止操作後,不能再次使用

Optional 容器類

用于盡量避免空指針異常

  • Optional.of(T t) : 建立一個 Optional 執行個體
  • Optional.empty() : 建立一個空的 Optional 執行個體
  • Optional.ofNullable(T t):若 t 不為 null,建立 Optional 執行個體,否則建立空執行個體
  • isPresent() : 判斷是否包含值
  • orElse(T t) :  如果調用對象包含值,傳回該值,否則傳回t
  • orElseGet(Supplier s) :如果調用對象包含值,傳回該值,否則傳回 s 擷取的值
  • map(Function f): 如果有值對其處理,并傳回處理後的Optional,否則傳回 Optional.empty()
  • flatMap(Function mapper):與 map 類似,要求傳回值必須是Optional