Java使用lambda表達式簡化代碼的示例詳解
代碼,自然寫的越簡潔越好啦,寫的人舒服,看的人也舒服,一切為了高效。
要把有限的時間花到其它有意思的事情上去。
目的
學(xué)習(xí)簡化代碼的思路,使用jdk8新特性lamada表達式。
推理一下
某接口,只有一個方法。
比如這個:
package java.lang;
@FunctionalInterface
public interface Runnable {
void run();
}或者是這個:
interface MyInterface{
void sayHi();
}實現(xiàn)接口,使用方法
一般我們要使用Runable子類開啟一個線程,要實現(xiàn)Runnable接口,調(diào)用Threead類的start方法:
public class LeaningLamda implements Runnable{
public static void main(String[] args) {
new Thread(new LeaningLamda()).start();
}
@Override
public void run() {
System.out.println(this.getClass()+"我已經(jīng)在跑了!");
}
}或者用sayHi方法干點什么,要先實現(xiàn)接口,再調(diào)用:
public class LeaningLamda2 implements MyInterface{
public static void main(String[] args) {
new LeaningLamda2().sayHi();
}
@Override
public void sayHi() {
System.out.println("ok ok ok ok ,i am say Hi!");
}
}
interface MyInterface{
void sayHi();
}內(nèi)部類實現(xiàn)接口,使用方法
如果這個方法我就用一次,那我可以在內(nèi)部類中實現(xiàn)它,提高程序性能:
public class LeaningLamda{
static class MyRun implements Runnable{
@Override
public void run() {
System.out.println(this.getClass()+"我已經(jīng)在跑了!");
}
}
public static void main(String[] args) {
new Thread(new MyRun()).start();
}
}一樣的用sayHi方法:
public class LeaningLamda2 {
static class MyHi implements MyInterface{
@Override
public void sayHi() {
System.out.println("ok ok ok ok ,i am say Hi!");
}
}
public static void main(String[] args) {
new MyHi().sayHi();
}
}
interface MyInterface{
void sayHi();
}局部內(nèi)部類實現(xiàn)接口,使用方法
既然只使用一次,那我為啥不把它放在使用的方法里面去,性能不就又UpUpUpUp。
像這樣:
public class LeaningLamda{
public static void main(String[] args) {
class MyRun implements Runnable{
@Override
public void run() {
System.out.println(this.getClass()+"我已經(jīng)在跑了!");
}
}
//調(diào)用在定義后面,謝謝。
new Thread(new MyRun()).start();
}
}或是這樣:
public class LeaningLamda2 {
public static void main(String[] args) {
class MyHi implements MyInterface{
@Override
public void sayHi() {
System.out.println("ok ok ok ok ,i am say Hi!");
}
}
new MyHi().sayHi();
}
}
interface MyInterface{
void sayHi();
}匿名內(nèi)部類實現(xiàn)接口,使用方法
我就用一次,要什么名字?。磕苌佥斎胍粋€字符都是賺的。需要借助父類或者接口名來實現(xiàn)。
你看:
public class LeaningLamda{
public static void main(String[] args) {
//需要借助父類或者接口來聲明
new Thread(new Runnable(){
@Override
public void run() {
System.out.println(this.getClass()+"我已經(jīng)在跑了!");
}
}).start();
}
}又如:
public class LeaningLamda2 {
public static void main(String[] args) {
new MyInterface(){
@Override
public void sayHi() {
System.out.println("ok ok ok ok ,i am say Hi!");
}
}.sayHi();
}
}
interface MyInterface{
void sayHi();
}使用lamda表達式的,實現(xiàn)方法
jdk 8 看不下去了,給我們提供了一個更加簡化的方案,你看:
lamda表達式實現(xiàn)創(chuàng)建單個簡單線程:
lamda表達式sayHi:
public class LeaningLamda2 {
public static void main(String[] args) {
//此處需要借助一個父類或接口對象來存放,調(diào)用它
MyInterface ls = ()->{
System.out.println("ok ok ok ok ,i am say Hi!"); };
ls.sayHi();
}
}
interface MyInterface{
void sayHi();
}可帶參數(shù)
lamda表達式可以帶參數(shù),可以不指定類型,它會自適應(yīng)類型:
public class LeaningLamda2 {
public static void main(String[] args) {
MyInterface ls = (i,str)->{
System.out.println("int:"+i);
System.out.println("String:"+str);};
ls.sayHi(520,"i love you!");
}
}
interface MyInterface{
void sayHi(int i,String str);
}運行結(jié)果:

只有一個參數(shù)
那我括號都可以省了!
public class LeaningLamda2 {
public static void main(String[] args) {
MyInterface ls = str-> {System.out.println("String:"+str);};
ls.sayHi("i love you!");
}
}
interface MyInterface{
void sayHi(String str);
}運行結(jié)果:

有返回值
如果有返回值呢,正常返回:
public class LeaningLamda2 {
public static void main(String[] args) {
MyInterface ls = (String str)-> {
String str2 = "最后的贏家是:"+str;
return str2;};
System.out.println(ls.sayHi("lurenjia"));
}
}
interface MyInterface{
String sayHi(String str);
}只有一條語句
如果方法只有一條語句,那大括號也沒有必要,可以省略:
public class LeaningLamda2 {
public static void main(String[] args) {
MyInterface ls = (int i,String str)-> System.out.println("int:"+i+"----String:"+str);
ls.sayHi(520,"i love you!");
}
}
interface MyInterface{
void sayHi(int i,String str);
}究極省略,不能再省了
就一條語句,是返回值:
public class LeaningLamda2 {
public static void main(String[] args) {
MyInterface ls = str-> "最后的贏家是:"+str;
System.out.println(ls.sayHi("中國"));
}
}
interface MyInterface{
String sayHi(String str);
}運行結(jié)果:

lamda總結(jié)
常用于創(chuàng)建簡單線程。
1、接口只有一個方法,可有參數(shù),可有返回值。
2、本方法內(nèi)容簡單,使用較少。
3、基本形式為:
接口或父類 名稱 = (參數(shù)類型1 參數(shù)1,參數(shù)類型2 參數(shù)2,...)->{
內(nèi)容
};
名稱.方法(參數(shù)1,參數(shù)2,...);
4、可以省略的是:
1、lamada參數(shù)類型可省,它自適應(yīng)。
2、方法內(nèi)容只有一條內(nèi)容,大括號可省。
3、內(nèi)容只有一句返回語句,return可省,直接寫值。
到此這篇關(guān)于Java使用lambda表達式簡化代碼的示例詳解的文章就介紹到這了,更多相關(guān)Java lambda表達式簡化代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一個注解搞定Spring Security基于Oauth2的SSO單點登錄功能
本文主要介紹 同域 和 跨域 兩種不同場景單點登錄的實現(xiàn)原理,并使用 Spring Security 來實現(xiàn)一個最簡單的跨域 SSO客戶端。對Spring Security基于Oauth2的SSO單點登錄功能感興趣的朋友一起看看吧2021-09-09
解決SpringBoot中LocalDateTime返回前端數(shù)據(jù)為數(shù)組結(jié)構(gòu)的問題
本文主要介紹了解決SpringBoot中LocalDateTime返回前端數(shù)據(jù)為數(shù)組結(jié)構(gòu)的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
spring?boot?Mybatis?攔截器實現(xiàn)拼接sql和修改的代碼詳解
這篇文章主要介紹了spring?boot?Mybatis?攔截器實現(xiàn)拼接sql和修改,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
java SpringBoot自定義注解,及自定義解析器實現(xiàn)對象自動注入操作
這篇文章主要介紹了java SpringBoot自定義注解,及自定義解析器實現(xiàn)對象自動注入操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
關(guān)于SpringBoot攔截器攔截靜態(tài)資源的問題
這篇文章主要介紹了關(guān)于SpringBoot攔截器攔截靜態(tài)資源的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

