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

歡迎訪問 生活随笔!

生活随笔

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

java

【Java】函数式编程思想-Lambda表达式

發布時間:2024/7/5 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】函数式编程思想-Lambda表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

面向對象的思想:做一件事情,找一個能解決這個事情的對象,調用對象的方法,完成事情.
函數式編程思想:只要能獲取到結果,誰去做的,怎么做的都不重要,重視的是結果,不重視過程
Java 8(JDK 1.8)中,加入了Lambda表達式的重量級新特性。

1 Runnable的實現舉例

1.1 傳統寫法:

public class RunnableImpl implements Runnable {@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"新線程創建了");} } public class Test {public static void main(String[] args) {RunnableImpl ri = new RunnableImpl();Thread t = new Thread(ri);t.start();} }

1.2 簡化寫法-匿名內部類

public static void main(String[] args) {new Thread(new Runnable(){@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"新線程創建了");}}).start();}

1.3 Lambda去除冗余

public static void main(String[] args) {new Thread(()->{System.out.println(Thread.currentThread().getName()+"新線程創建了");}).start();}

2 Lambda表達式格式

  • 一些參數
  • 一個箭頭
  • 一段代碼
  • 格式:(參數列表)-> (重寫方法的代碼)

3 無參數無返回的Lambda

定義接口類

public interface Cook {public abstract void makeFood(); }

定義測試類

public class Test {public static void main(String[] args) {//匿名內部類invokeCook(new Cook(){@Overridepublic void makeFood() {System.out.println("吃飯了");}});//Lambda表達式invokeCook(()->{System.out.println("吃飯了");});}public static void invokeCook(Cook cook){cook.makeFood();} }

4 有參數和返回值的Lambda

4.1 傳統寫法

public class Test {public static void main(String[] args) {Person[] arr = {new Person("張三",10),new Person("李四",20),new Person("王五",30)};//按照年齡升序 前-后Arrays.sort(arr, new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {return o1.getAge() - o2.getAge();}});for (Person person : arr) {System.out.println(person);}} }

4.2 Lambda寫法

public class Test {public static void main(String[] args) {Person[] arr = {new Person("張三",10),new Person("李四",20),new Person("王五",30)};//按照年齡升序 前-后Arrays.sort(arr, (Person o1, Person o2)-> {return o1.getAge() - o2.getAge();});for (Person person : arr) {System.out.println(person);}} }

4.3 自定義接口練習

public interface Calculator {public abstract int cal(int num1, int num2); } public class Test {public static void main(String[] args) {invokeCal(10,20,(int a, int b)->{return a+b;});//30invokeCal(40,20,(int a, int b)->{return a-b;});//20invokeCal(40,20,(int a, int b)->{return a*b;});//800}public static void invokeCal(int a, int b, Calculator c){int sum = c.cal(a,b);System.out.println(sum);} }

5 Lambda的省略格式和使用前提

  • 可以省略參數列表括號中的參數類型
  • 如果參數只有一個類型和()都可以省略
  • 如果{}中的代碼只有一行都可以省略{}、return、分號 (三者要一起省略)
public class Test {public static void main(String[] args) {//Lambda表達式invokeCook(()->System.out.println("吃飯了"));}public static void invokeCook(Cook cook){cook.makeFood();} } public class Test {public static void main(String[] args) {Person[] arr = {new Person("張三",10),new Person("李四",20),new Person("王五",30)};//按照年齡升序 前-后Arrays.sort(arr, (o1, o2)-> return o1.getAge() - o2.getAge());} }

使用前提

  • 必須具有接口,且接口中只有一個抽象方法。【Runnable、Comparator和自定義類型都只有一個抽象方法】
  • 方法的參數或局部變量類型必須式Lambda對應的接口類型
  • 有且只有一個抽象方法的接口稱作函數式接口(后面會詳細介紹函數式接口)

總結

以上是生活随笔為你收集整理的【Java】函数式编程思想-Lambda表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

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