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

Java Lambda 表達式從入門到實戰:函數式介面、Stream 流與方法引用

     編輯:Java 相關知識

Lambda 核心語法

(參數列表) -> { 方法體; return 結果; }  // 完整形式
(參數列表) -> 表達式                       // 單行表達式,隱式返回
參數 -> 表達式                             // 單參數可省略括號

本質:函數式介面(單一抽象方法介面)的匿名實現實例。

九步演進:從硬編碼到 Stream 流

場景:社交應用依條件篩選會員並執行操作(發郵件、列印等)。

1. 硬編碼每種條件

void printOlderThan(List<Person> roster, int age) { ... }

2. 通用範圍條件

void printAgeRange(List<Person> roster, int low, int high) { ... }

3. 抽出判斷邏輯 → 函數式介面

interface CheckPerson { boolean test(Person p); }
void printPersons(List<Person> roster, CheckPerson tester) { ... }

4. 匿名類實現

printPersons(roster, new CheckPerson() {
    public boolean test(Person p) { return p.getAge() >= 18; }
});

5. Lambda 取代匿名類

printPersons(roster, p -> p.getAge() >= 18);

6. 標準函數式介面 Predicate<T>

void printPersons(List<Person> roster, Predicate<Person> tester) { ... }
printPersons(roster, p -> p.getGender()==MALE && p.getAge()>=18);

7. 行為參數化:Consumer<T> / Function<T,R>

void process(List<Person> roster, Predicate<Person> filter,
             Function<Person, String> mapper, Consumer<String> block) {
    roster.stream().filter(filter).map(mapper).forEach(block);
}

8. 泛型化:通用元素處理

<X, Y> void processElements(Iterable<X> src, Predicate<X> filter,
                            Function<X, Y> mapper, Consumer<Y> block) { ... }

9. Stream API 一行完成

roster.stream()
    .filter(p -> p.getGender()==MALE && p.getAge()>=18 && p.getAge()<=25)
    .map(Person::getEmailAddress)
    .forEach(System.out::println);

方法引用四種形式

類型範例等價 Lambda
靜態方法Integer::parseInts -> Integer.parseInt(s)
實例方法System.out::printlnx -> System.out.println(x)
任意對象實例方法String::lengths -> s.length()
建構子ArrayList::new() -> new ArrayList()

變數捕獲規則

  • 只能捕獲 final 或 effectively final(未重新賦值)的區域變數
  • 不引入新作用域;this 指向外部類實例

序列化限制

目標類型與捕獲參數皆實作 Serializable 才可序列化,**強烈不建議**序列化 Lambda。

Lambda + Stream + 方法引用,讓 Java 邁入函數式編程新紀元,代碼更簡潔、意圖更清晰、並行更容易。

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