欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在lambda中使用外部變量的一些心得分享

 更新時間:2023年11月20日 16:45:28   作者:洛風(fēng)釋  
這篇文章主要介紹了在lambda中使用外部變量的一些心得,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

隨著java8的普及,越來越多的人開始使用lambda表達(dá)式。

然后初學(xué)者們總會遇到一個奇怪的問題:

Variable used in lambda expression should be final or effectively final

這個錯的產(chǎn)生的原因是因?yàn)樵趌ambda表達(dá)式中訪問外部變量時,都不允許有修改變量的傾向,即

1、變量必須是final類型的

2、如果沒有定義成final,那么變量在初始化以后,不允許再有任何賦值的情況出現(xiàn)。(其實(shí)就是隱式final限制)

這種情況的具體原因本文不討論,百度一大堆解釋,本次主要討論如果有非final變量,如何在lambda中使用。

方法一

這是我最初遇到該類問題時的解決辦法,就是不用lambda,改為普通寫法。

如將forecah循環(huán)改為Iterator模式,這種方法一勞永逸。

方法二

利用list特性,地址不變,value可變。

List<User> a=new ArrayList<>();
boolean flag=true;
Set<Boolean> flagList =new HashSet<>();
a.forEach(item->{
	if(item.getAge()>18) {
		//Local variable flag defined in an enclosing scope must be final or effectively final
        //flag=false;
        flagList.add(false);
	}
	if(item.getName().equals("zhangsan")) {
		flagList.add(false);
	}
});
if(flagList.contains(false)) {
	return false;
}

如上,可能例子不太好。

之前公司的代碼是,要對list中所有的對象進(jìn)行規(guī)則校驗(yàn),20多種情況。

在寫完以后才發(fā)現(xiàn)需要返回是否全部通過,這時改成迭代器模式就太麻煩了,于是就采用了這種方式返回。

方法三

有時我們會遇到另一種情況,定義一個value=0,當(dāng)type=1的時候,value=100。

并且這種情況不需要在foreach中反復(fù)處理,可以采用封裝方法的方式實(shí)現(xiàn)。

    public static void main(String[] args) {
		List<User> a=new ArrayList<>();
		int value=0;
		if(true) {
			value=100;
		}
		int lambdaValue=getValue(true);
		a.forEach(item->{
			//Local variable flag defined in an enclosing scope must be final or effectively final
//			item.setAge(value);
			item.setAge(lambdaValue);
		});
		
	}
	
	static int getValue(boolean flag) {
		return flag?100:0;
	}

方法四

這個方法是方法三的變種,就是在之前處理完value后,將value再賦值給lambdaValue。

    List<User> a=new ArrayList<>();
		int value=0;
		if(true) {
			value=100;
		}
		int lambdaValue=value;
		a.forEach(item->{
			//Local variable flag defined in an enclosing scope must be final or effectively final
//			item.setAge(value);
			item.setAge(lambdaValue);
		});

方法三和方法四可以根據(jù)實(shí)際情況來選擇。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java教程散列表和樹所對應(yīng)容器類及HashMap解決沖突學(xué)習(xí)

    java教程散列表和樹所對應(yīng)容器類及HashMap解決沖突學(xué)習(xí)

    本篇篇文章是java教程,主要介紹了java教程散列表,樹所對應(yīng)容器類及HashMap解決沖突的學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • java:找不到符號報錯的排錯方案舉例

    java:找不到符號報錯的排錯方案舉例

    當(dāng)你使用一個未定義或未導(dǎo)入的類時,編譯器會報錯,下面這篇文章主要給大家介紹了關(guān)于java:找不到符號報錯的排錯方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Java基于二分搜索樹、鏈表的實(shí)現(xiàn)的集合Set復(fù)雜度分析實(shí)例詳解

    Java基于二分搜索樹、鏈表的實(shí)現(xiàn)的集合Set復(fù)雜度分析實(shí)例詳解

    這篇文章主要介紹了Java基于二分搜索樹、鏈表的實(shí)現(xiàn)的集合Set復(fù)雜度分析,結(jié)合實(shí)例形式詳細(xì)分析了Java基于二分搜索樹、鏈表的實(shí)現(xiàn)的集合Set復(fù)雜度分析相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • Java中的單向鏈表詳解

    Java中的單向鏈表詳解

    這篇文章主要介紹了Java中的單向鏈表詳解,單向鏈表又叫單鏈表,是鏈表的一種,由節(jié)點(diǎn)構(gòu)成,head指針指向第一個稱為表頭節(jié)點(diǎn),而終止指向最后一個null指針,需要的朋友可以參考下
    2024-01-01
  • JPA配置方式+逆向工程映射到Entity實(shí)體類

    JPA配置方式+逆向工程映射到Entity實(shí)體類

    這篇文章主要介紹了JPA配置方式+逆向工程映射到Entity實(shí)體類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 聊聊Java 成員變量賦值和構(gòu)造方法誰先執(zhí)行的問題

    聊聊Java 成員變量賦值和構(gòu)造方法誰先執(zhí)行的問題

    這篇文章主要介紹了聊聊Java 成員變量賦值和構(gòu)造方法誰先執(zhí)行的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • SpringBoot集成redisson全過程

    SpringBoot集成redisson全過程

    本文主要介紹了如何集成Redisson,包括環(huán)境配置、引入Redisson的依賴、添加Redisson的配置類以及Redisson的常見使用方法,在類中注入Redisson后,可以獲取鎖對象和使用,這些都是作者的個人經(jīng)驗(yàn),供讀者參考
    2024-10-10
  • Java中生成隨機(jī)數(shù)的4種方式與區(qū)別詳解

    Java中生成隨機(jī)數(shù)的4種方式與區(qū)別詳解

    生成隨機(jī)數(shù)是我們?nèi)粘i_發(fā)經(jīng)常會遇到的一個功能,這篇文章主要給大家介紹了關(guān)于Java中生成隨機(jī)數(shù)的4種方式與區(qū)別、應(yīng)用場景的相關(guān)資料,4個方式分別是Random、ThreadLocalRandom、SecureRandom以及Math,需要的朋友可以參考下
    2021-06-06
  • 解決fastjson從1.1.41升級到1.2.28后報錯問題詳解

    解決fastjson從1.1.41升級到1.2.28后報錯問題詳解

    這篇文章主要介紹了解決fastjson從1.1.41升級到1.2.28后報錯問題詳解,需要的朋友可以參考下
    2020-02-02
  • SpringBoot?如何使用sharding?jdbc進(jìn)行分庫分表

    SpringBoot?如何使用sharding?jdbc進(jìn)行分庫分表

    這篇文章主要介紹了SpringBoot?如何使用sharding?jdbc進(jìn)行分庫分表,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評論