Java Lambda 表达式的常见应用场景
文章推薦
- 精選java等全套學習資源
- 精選java電子圖書資源
- 精選大數據學習資源
- java項目練習精選
Lambda 表達式是 Java 8 引入的新特性,結合 forEach 方法可以更方便地實現遍歷。此外,它還可代替 Runnable 類,大大簡化了代碼的編寫。
下面介紹了一些常見的應用場景,在這些場景中適時地使用 Lambda 表達式要比通常的方式來得更加簡潔和方便。
##列表迭代
對一個列表的每一個元素進行操作,不使用 Lambda 表達式時如下:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); for (int element : numbers) {System.out.prinln(element); }使用 Lambda 表達式:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.forEach(x -> System.out.println(x));如果只需要調用單個函數對列表元素進行處理,那么可以使用更加簡潔的 方法引用 代替 Lambda 表達式:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.forEach(System.out::println);##事件監聽
不使用 Lambda 表達式:
button.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {//handle the event} });使用 Lambda 表達式,需要編寫多條語句時用花括號包圍起來:
button.addActionListener(e -> {//handle the event });##Predicate 接口
java.util.function 包中的 Predicate 接口可以很方便地用于過濾。如果你需要對多個對象進行過濾并執行相同的處理邏輯,那么可以將這些相同的操作封裝到 filter 方法中,由調用者提供過濾條件,以便重復使用。
不使用 Predicate 接口,對于每一個對象,都需要編寫過濾條件和處理邏輯:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); List<String> words = Arrays.asList("a", "ab", "abc");numbers.forEach(x -> {if (x % 2 == 0) {//process logic} }) words.forEach(x -> {if (x.length() > 1) {//process logic} })使用 Predicate 接口,將相同的處理邏輯封裝到 filter 方法中,重復調用:
public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);List<String> words = Arrays.asList("a", "ab", "abc");filter(numbers, x -> (int)x % 2 == 0);filter(words, x -> ((String)x).length() > 1); }public static void filter(List list, Predicate condition) {list.forEach(x -> {if (condition.test(x)) {//process logic}}) }filter 方法也可寫成:
public static void filter(List list, Predicate condition) {list.stream().filter(x -> condition.test(x)).forEach(x -> {//process logic}) }##Map 映射
使用 Stream 對象的 map 方法將原來的列表經由 Lambda 表達式映射為另一個列表,并通過 collect 方法轉換回 List 類型:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); List<Integer> mapped = numbers.stream().map(x -> x * 2).collect(Collectors.toList()); mapped.forEach(System.out::println);##Reduce 聚合
reduce 操作,就是通過二元運算對所有元素進行聚合,最終得到一個結果。例如使用加法對列表進行聚合,就是將列表中所有元素累加,得到總和。
因此,我們可以為 reduce 提供一個接收兩個參數的 Lambda 表達式,該表達式就相當于一個二元運算:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream().reduce((x, y) -> x + y).get(); System.out.println(sum);##代替 Runnable
以創建線程為例,使用 Runnable 類的代碼如下:
Runnable r = new Runnable() {@Overridepublic void run() {//to do something} }; Thread t = new Thread(r); t.start();使用 Lambda 表達式:
Runnable r = () -> {//to do something }; Thread t = new Thread(r); t.start();或者使用更加緊湊的形式:
Thread t = new Thread(() -> {//to do something }); t.start;作者:Wray Zheng
原文:http://www.codebelief.com/article/2018/01/java-lambda-expression-common-application-scenarios/
總結
以上是生活随笔為你收集整理的Java Lambda 表达式的常见应用场景的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java网络编程(三)
- 下一篇: Java 技术之垃圾回收机制