【Java】函数式编程思想-Lambda表达式
生活随笔
收集整理的這篇文章主要介紹了
【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) (三者要一起省略)
使用前提:
- 必須具有接口,且接口中只有一個(gè)抽象方法。【Runnable、Comparator和自定義類型都只有一個(gè)抽象方法】
- 方法的參數(shù)或局部變量類型必須式Lambda對(duì)應(yīng)的接口類型
- 有且只有一個(gè)抽象方法的接口稱作函數(shù)式接口(后面會(huì)詳細(xì)介紹函數(shù)式接口)
總結(jié)
以上是生活随笔為你收集整理的【Java】函数式编程思想-Lambda表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【分布式训练】单机多卡—PyTorch
- 下一篇: 【Java】文件操作