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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

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

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

面向?qū)ο蟮乃枷?#xff1a;做一件事情,找一個(gè)能解決這個(gè)事情的對(duì)象,調(diào)用對(duì)象的方法,完成事情.
函數(shù)式編程思想:只要能獲取到結(jié)果,誰去做的,怎么做的都不重要,重視的是結(jié)果,不重視過程
Java 8(JDK 1.8)中,加入了Lambda表達(dá)式的重量級(jí)新特性。

1 Runnable的實(shí)現(xiàn)舉例

1.1 傳統(tǒng)寫法:

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

1.2 簡(jiǎn)化寫法-匿名內(nèi)部類

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

1.3 Lambda去除冗余

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

2 Lambda表達(dá)式格式

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

3 無參數(shù)無返回的Lambda

定義接口類

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

定義測(cè)試類

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

4 有參數(shù)和返回值的Lambda

4.1 傳統(tǒng)寫法

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 自定義接口練習(xí)

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的省略格式和使用前提

  • 可以省略參數(shù)列表括號(hào)中的參數(shù)類型
  • 如果參數(shù)只有一個(gè)類型和()都可以省略
  • 如果{}中的代碼只有一行都可以省略{}、return、分號(hào) (三者要一起省略)
public class Test {public static void main(String[] args) {//Lambda表達(dá)式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());} }

使用前提

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。