首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 8 Lambda 表達式與集合框架新方法實戰:Collection、List、Map 進階操作完全指南

     編輯:Java 相關知識

Collection / List 新方法

方法函數介面說明範例
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(...);

Map 新方法 (以 HashMap 為例)

方法函數介面說明範例
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");

實戰場景:多值 Map 初始化

// 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 寫法極度簡潔,無需記住介面名稱,專注業務邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved