Lambda表示式學習(從原始類推導lambda表示式),結合線程學習
阿新 • • 發佈:2021-01-25
技術標籤:Java-Lambdalambda
1、lambda表示式線上程中的推導
package com.project; /** * lambda表示式 進化 * @author Administrator * */ public class LambdaThread{ //1、靜態內部類 static class Test implements Runnable{ @Override public void run() { for(int i=0;i<20; i++){ System.out.println("1.一邊聽歌"); } } } public static void main(String[] args) { //第一種實現 new Thread(new Test()).start(); //2、區域性內部類(方法內部類),方法內沒有靜態使用,靜態是針對類來說的 class Test2 implements Runnable{ @Override public void run() { for(int i=0;i<20; i++){ System.out.println("2.一邊聽歌"); } } } //第二種實現 new Thread(new Test2()).start(); //3、匿名內部類:必須藉助介面或父類 //第三種實現,因為只用一次,所以使用匿名內部類 new Thread(new Runnable() { public void run() { for(int i=0;i<20; i++){ System.out.println("3.一邊聽歌"); } } }).start(); //4、jdk8簡化 lambda表示式 //第四種實現:只關注實現體(實現類只有一個方法,可簡寫使用lambda) new Thread(()->{ for(int i=0;i<20; i++){ System.out.println("4.一邊聽歌"); } }).start(); //5、jdk8簡化 lambda表示式 再簡化 //第五種實現:只關注實現體(如果實現體只有一行程式碼) new Thread(()-> System.out.println("5.一邊聽歌")).start(); } }
2、lambda推導
package com.project; /** * lambda推導 * 1、lambda表示式:方法體只有一個方法, * 2、lambda簡化表示式:方法體只有一行程式碼 * 3、lambda推導必須存在型別,賦值後再呼叫方法 * @author Administrator * */ public class LambdaTest01 { //第二種:靜態內部類 static class like1 implements ILike{ @Override public void lambda() { System.out.println("i like lambda1"); } } public static void main(String[] args) { ILike like = new like(); like.lambda(); like = new like1(); like.lambda(); //第三種:區域性內部類(方法內部類) class like2 implements ILike{ @Override public void lambda() { System.out.println("i like lambda2"); } } like = new like2(); like.lambda(); //第四種:匿名內部類 like = new ILike() { @Override public void lambda() { System.out.println("i like lambda3"); } }; like.lambda(); //第五種:lambda表示式,去掉類名和方法名 like = ()->{ System.out.println("i like lambda4"); }; like.lambda(); //第六種:lambda表示式簡化(只有一行程式碼) like = ()->System.out.println("i like lambda5"); like.lambda(); } } interface ILike{ void lambda(); } //第一種:外部類 class like implements ILike{ @Override public void lambda() { System.out.println("i like lambda"); } }
3、lambda帶參推導
package com.project; /** * lambda 方法帶引數 * * @author Administrator * */ public class LambdaTest02 { public static void main(String[] args) { //寫法1 ILove love = (int a)->{ System.out.println(a); }; love.lambda(100); //寫法2:型別可以去掉 love = (a) -> { System.out.println(a); }; love.lambda(50); //寫法3:如果是單引數括號()可以去掉 love = a -> { System.out.println(a); }; love.lambda(5); //寫法4:如果方法體中只有一行語句,可再簡寫 love = a -> System.out.println(a); love.lambda(0); } } interface ILove{ void lambda(int a); }
4、lambda 方法帶引數+返回值
package com.project;
/**
* lambda 方法帶引數+返回值
*
* @author Administrator
*
*/
public class LambdaTest03 {
public static void main(String[] args) {
//寫法1
IInterest interest = (int a,int b)->{
return a+b;
};
int num = interest.lambda(1, 1);
System.out.println(num);
//寫法2:去掉型別
interest = (a,b)->{
return a+b;
};
num = interest.lambda(2, 2);
System.out.println(num);
//寫法3:如果方法體中只有一行程式碼
interest = (a,b) -> a+b;
num = interest.lambda(4, 4);
System.out.println(num);
//也可以直接返回型別值
interest =(a,b) -> 100;
num = interest.lambda(8, 8);
System.out.println(num);
}
}
interface IInterest{
int lambda(int a,int b);
}
5、執行緒使用lambda表示式
package com.project;
/**
* 執行緒使用lambda表示式
*
* @author Administrator
*
*/
public class LambdaTest04 {
public static void main(String[] args) {
new Thread(()->{
for(int i=0;i<10;i++){
System.out.println("一邊學習lambda");
}
}).start();
new Thread(()->System.out.println("一邊捶胸頓足")).start();
}
}