lambda 的入門詳解
1.為什麼用lambda
簡化我們的操作
舉個例子
建立一個執行緒
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hh");
}
}).start();
以前我們快速建立一個執行緒要這樣
現在用lambda
new Thread(()-> System.out.println("lambda-->hh")).start();
一個更重要的原因是Java 以後為了更好的函數語言程式設計
2.lambda怎麼用
2.1 lambda的使用場景
lambda只能用在函式式介面,函式式介面就是一個介面裡面只有一個抽象方法
* @author Arthur van Hoff
* @see java.lang.Thread
* @see java.util.concurrent.Callable
* @since JDK1.0
*/
@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface Runnable is used
* to create a thread, starting the thread causes the object's
* run method to be called in that separately executing
* thread.
*
* The general contract of the method run is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
public abstract void run();
}
可以透過@FunctionalInterface來表示是一個函式式介面
Java 為我們建立了很多常用的函式式介面,不用我們一個一個來建立
四大內建函式式介面
Consumer< T > 消費性 介面: void accept(T t);
Supplier< T > 供給型介面 : T get();
Function< T , R > 函式式介面 : R apply (T t);
Predicate< T > 斷言形介面 : boolean test(T t);
2.2 使用
(引數)->{方法體}
new Thread(()-> { System.out.println("lambda-->hh");}).start();
其實到這就可以熟練的用lambda,但是它還能簡化,你說氣不氣=。=
1.一個引數時可省略()
Consumer consumer = x -> System.out.println(x);
consumer.accept("1個引數省略()");
2.方法體只有一條語句省略{}
== 不管它是否需要有返回值==
Function function= x-> x;
Integer apply = function.apply(1);
System.out.println(apply);
3.型別推斷
lambda 表示式的引數型別可省略不寫
聰明的你肯定發現了為什麼引數 不需要寫型別,為什麼不需要,Java會根據泛型來推斷
你也可以指定引數的型別,但是沒必要
Consumer consumer = (String x) -> System.out.println(x);
3.方法引用
System.out.println("呼呦呦");
public void println(String x) {
synchronized (this) {
print(x);
newLine();
} 鄭州人流醫院哪家好
}
println是一個引數沒有返回
這和Consumer 消費者介面很符合啊,下面這樣寫可不可以簡化啊(就nm事多)
Consumer consumer = x -> System.out.println(x);
簡化版
Consumer consumer1 = System.out::println;
方法引用 引數與返回值需要一致
/**
* 方法引用 如果lambda體中有方法已經實現,我們可以使用 方法引用 引數與返回值需要一致
*
* 主要有3種
* 物件::例項方法
* 類::靜態方法
* 類::例項方法
*
* 構造器引用
* 呼叫的構造方法與傳入的引數有關
*
* 陣列引用
* Type[]:new;
*/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2685049/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- AWS Lambda 使用入門
- 詳解HDFS入門
- Lambda表示式詳解
- lambda表示式——快速入門
- Go 中的 gRPC 入門詳解GoRPC
- Anaconda 使用入門詳解
- C# Lambda表示式詳解,及Lambda表示式樹的建立C#
- Solon詳解(一)- 快速入門
- Redis入門--進階詳解Redis
- Spring入門之IOC詳解Spring
- Logback 快速入門 / 使用詳解
- Java中lambda表示式詳解Java
- jdk1.8 lambda表示式入門JDK
- 3分鐘入門lambda表示式
- Java入門:Lambda常用表示式解析Java
- Java8特性詳解 lambda表示式(二):流式處理中的lambdaJava
- Flutter 入門 — Container 屬性詳解FlutterAI
- Vue入門—事件與方法詳解Vue事件
- 詳解安卓架構入門安卓架構
- 卡特蘭(Catalan)數入門詳解
- spring-boot入門程式詳解Springboot
- 匿名函式(lambda)詳解 C++函式C++
- 詳解前端HTTP協議入門教程前端HTTP協議
- Next.js 入門超詳解教程JS
- 樹莓派入門操作流程詳解樹莓派
- Springboot mini - Solon詳解(一)- 快速入門Spring Boot
- 專題一之Spring Boot入門詳解Spring Boot
- Kotlin——高階篇(一):Lambda表示式詳解Kotlin
- 新手入門,webpack入門詳細教程Web
- webpack4.x最詳細入門講解Web
- gitbook 入門教程之常用命令詳解Git
- Springboot是什麼?Springboot詳解!入門介紹Spring Boot
- Python入門小專案-氣泡排序詳解Python排序
- Jaeger Client Go 鏈路追蹤|入門詳解clientGo
- Python入門到精通Day12:06-15-lambdaPython
- Java中Lambda表示式基礎及使用詳解Java
- Python程式設計入門基礎語法詳解Python程式設計
- Java反射詳解:入門+使用+原理+應用場景Java反射