日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java Lambda 表达式的常见应用场景

發布時間:2025/3/20 java 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 表达式的常见应用场景的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。