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