在Java 8之前,Java是一個完全面向對象編程語言,然而實現函數式編程的限制被證明是這門語言的弱點。但是,Java 8的Lambda表達式改變了這一點,這讓Java工程師們可以非常方便地編寫函數式代碼。本文將介紹Lambda的基礎知識,並且提供詳細的示例代碼。
一、什麼是Lambda表達式
Lambda表達式是一種匿名函數,它沒有名稱和修飾符(比如public,private等),但是有參數列表、函數體和可能的返回值。Lambda表達式的基本語法如下:
(parameters) -> expression 或 (parameters) -> { statements; }
這裡parameters指定了函數的參數列表,而expression或statements指定了函數體的操作。
以下是一個簡單的Lambda表達式的例子,它接受一個整數參數並將它乘以2:
(int x) -> x * 2
你可能已經注意到關鍵詞return沒有出現在Lambda表達式中。實際上, 當Lambda僅包含一個語句,它隱含地為返回語句。如果表達式返回值,則沒有必要使用{}包裹表達式。因此,上面的Lambda表達式可以簡化如下:
(int x) -> x * 2
你還可以將Lambda表達式存儲在變量中,將其作為參數傳遞給方法,或者從方法中返回它們。接下來,我們將展示Lambda表達式的一些用例。
二、Lambda表達式的用途
1、過濾器
在Java 8之前,要對集合篩選操作或從中獲取元素非常繁瑣。但是,使用Lambda表達式可以非常方便地進行篩選、過濾操作。以下代碼演示如何使用Lambda表達式來過濾一個字符串列表:
List<String> stringList = Arrays.asList("Java", "C++", "Python", "Ruby", "Scala"); List<String> filteredList = stringList .stream() .filter(string -> string.startsWith("J")) .collect(Collectors.toList());
在這個例子中,我們使用stream()方法將字符串列錶轉換為一個流。接着使用filter()方法設定篩選條件,使用startsWith()方法,篩選以J開頭的字符串。最後,collect()方法將流轉換成列表。
2、對列表進行操作
操作列表的一個常見原因是在其中的每個元素上執行某個邏輯。例如,如果要將列表中的所有元素轉換為大寫,則可以通過使用Lambda表達式來完成此操作:
List<String> stringList = Arrays.asList("Java", "C++", "Python", "Ruby", "Scala"); List<String> uppercaseList = stringList .stream() .map(string -> string.toUpperCase()) .collect(Collectors.toList());
在這個例子中,map()方法將Lambda作為參數,該參數為列表中的每個元素執行toUpperCase()方法,並將轉換後的元素映射到一個列表中。
3、排序
Java 8還提供了對列表進行排序的快捷方式。以下代碼示例展示了如何使用Lambda表達式對整數列表進行排序:
List<Integer> integerList = Arrays.asList(5, 3, 9, 7, 1); List<Integer> sortedList = integerList .stream() .sorted((a, b) -> Integer.compare(a, b)) .collect(Collectors.toList());
在這個例子中,我們使用sorted()方法對integerList進行排序。當然,直接調用sort()方法也能實現排序,不過sorted()方法可以實現重複調用並返回新的列表。Lambda表達式通過調用Integer.compare()方法來實現數字的比較,從而對列表進行排序。
三、總結
在這篇文章中,我們介紹了Lambda表達式的基本語法,並且提供了一些完整的示例來說明Lambda表達式的一些重要用例。由於Lambda表達式最初是為函數式編程而設計的,因此Java的功能有極大的擴展。Java工程師們不僅可以更方便地編寫代碼,而且更容易實現函數式思想,從而開發出更高效的程序。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/249081.html