| 方法 | 函數介面 | 說明 | 範例 |
|---|---|---|---|
forEach(Consumer) | Consumer<T> | 遍歷執行動作 | list.forEach(s -> System.out.println(s)); |
removeIf(Predicate) | Predicate<T> | 刪除符合條件元素 | list.removeIf(s -> s.length() > 3); |
replaceAll(UnaryOperator) | UnaryOperator<T> | 替換每個元素 | list.replaceAll(s -> s.toUpperCase()); |
sort(Comparator) | Comparator<T> | 原地排序 | list.sort((a,b) -> a.length() - b.length()); |
spliterator() | — | 可分割迭代器,支援並行 | Spliterator<String> sp = list.spliterator(); |
stream() / parallelStream() | — | 返回 Stream 視圖 | list.stream().filter(...).collect(...); |
| 方法 | 函數介面 | 說明 | 範例 |
|---|---|---|---|
forEach(BiConsumer) | BiConsumer<K,V> | 遍歷鍵值對 | map.forEach((k,v) -> System.out.println(k + "=" + v)); |
getOrDefault(key, def) | — | 取值,無則回傳預設 | map.getOrDefault(4, "NoValue"); |
putIfAbsent(key, val) | — | 鍵不存在才放入 | map.putIfAbsent(5, "five"); |
remove(key, val) | — | 鍵值皆匹配才刪除 | map.remove(5, "five"); |
replace(key, val) | — | 鍵存在才替換 | map.replace(5, "FIVE"); |
replace(key, old, new) | — | 鍵存在且舊值匹配才替換 | map.replace(5, "five", "FIVE"); |
replaceAll(BiFunction) | BiFunction<K,V,V> | 全部替換值 | map.replaceAll((k,v) -> v.toUpperCase()); |
merge(key, val, fn) | BiFunction<V,V,V> | 合併:無則放入,有則 fn(old,val) | map.merge(k, newMsg, (v1,v2) -> v1 + v2); |
compute(key, fn) | BiFunction<K,V,V> | 計算新值關聯鍵,null 則刪除 | map.compute(k, (k,v) -> v==null?newMsg:v+newMsg); |
computeIfAbsent(key, fn) | Function<K,V> | 無鍵/值為 null 才計算並放入 | map.computeIfAbsent(1, k -> new HashSet<>()).add("yi"); |
computeIfPresent(key, fn) | BiFunction<K,V,V> | 鍵存在且非 null 才計算 | map.computeIfPresent(1, (k,v) -> v + "x"); |
// Java 7 需判斷 null
if (map.containsKey(1)) map.get(1).add("one");
else { Set<String> s = new HashSet<>(); s.add("one"); map.put(1, s); }
// Java 8 一行搞定
map.computeIfAbsent(1, k -> new HashSet<>()).add("yi");
Predicate<T>:boolean test(T) — 判斷Consumer<T>:void accept(T) — 消費Function<T,R>:R apply(T) — 轉換Supplier<T>:T get() — 供給UnaryOperator<T>:T apply(T) — 一元運算BinaryOperator<T>:T apply(T,T) — 二元運算BiConsumer<T,U>、BiFunction<T,U,R>、BiPredicate<T,U>:二元版本類型推導讓 Lambda 寫法極度簡潔,無需記住介面名稱,專注業務邏輯。