最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

Variable used in lambda expression should be final or effectively final

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

1、變量必須是final類型的

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

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

方法一

這是我最初遇到該類問題時(shí)的解決辦法,就是不用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)需要返回是否全部通過,這時(shí)改成迭代器模式就太麻煩了,于是就采用了這種方式返回。

方法三

有時(shí)我們會遇到另一種情況,定義一個(gè)value=0,當(dāng)type=1的時(shí)候,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;
	}

方法四

這個(gè)方法是方法三的變種,就是在之前處理完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é)

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

相關(guān)文章

  • springboot2.0整合logback日志的詳細(xì)代碼

    springboot2.0整合logback日志的詳細(xì)代碼

    這篇文章主要介紹了springboot2.0整合logback日志的應(yīng)用場景分析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • springboot如何使用thymeleaf完成頁面緩存

    springboot如何使用thymeleaf完成頁面緩存

    這篇文章主要介紹了springboot如何使用thymeleaf完成頁面緩存,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • IDEA與模擬器安裝調(diào)試失敗的處理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES

    IDEA與模擬器安裝調(diào)試失敗的處理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES

    這篇文章主要介紹了IDEA與模擬器安裝調(diào)試失敗的處理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java Spring-IOC容器與Bean管理之基于注解的方式案例詳解

    Java Spring-IOC容器與Bean管理之基于注解的方式案例詳解

    這篇文章主要介紹了Java Spring-IOC容器與Bean管理之基于注解的方式案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Spring?Boot?中starter的原理詳析

    Spring?Boot?中starter的原理詳析

    這篇文章主要介紹了Spring?Boot?中starter原理詳析,文章圍繞主題展開springboot的插件機(jī)制和starter原理相關(guān)資料,需要的小伙伴可以參考一下
    2022-06-06
  • SpringBoot中的異步任務(wù)解析

    SpringBoot中的異步任務(wù)解析

    這篇文章主要介紹了SpringBoot中的異步任務(wù)解析,SpringBoot 異步任務(wù)是一種在SpringBoot框架中使用的異步處理機(jī)制,可以提高系統(tǒng)的并發(fā)能力和響應(yīng)速度,需要的朋友可以參考下
    2023-10-10
  • 使用MybatisPlus實(shí)現(xiàn)sql日志打印優(yōu)化

    使用MybatisPlus實(shí)現(xiàn)sql日志打印優(yōu)化

    本文主要介紹了使用MybatisPlus實(shí)現(xiàn)sql日志打印優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • SpringBoot跨域問題的解決方法實(shí)例

    SpringBoot跨域問題的解決方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于SpringBoot跨域問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Java 實(shí)用注解篇之@Qualifier 深度解析及實(shí)戰(zhàn)案例

    Java 實(shí)用注解篇之@Qualifier 深度解析及實(shí)戰(zhàn)案例

    在Spring框架中,@Qualifier是一個(gè)常見的注解,主要用于解決依賴注入(DI)時(shí)的歧義性,本文給大家介紹Java 實(shí)用注解篇之@Qualifier 深度解析及實(shí)戰(zhàn)案例,感興趣的朋友一起看看吧
    2025-06-06
  • Intellij搭建springmvc常見問題解決方案

    Intellij搭建springmvc常見問題解決方案

    這篇文章主要介紹了Intellij搭建springmvc常見問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評論

南召县| 图木舒克市| 田东县| 绥阳县| 苍南县| 宽甸| 汉川市| 博兴县| 即墨市| 行唐县| 泰和县| 重庆市| 洛浦县| 安图县| 苏尼特右旗| 和田市| 岑巩县| 玛曲县| 牡丹江市| 虞城县| 沛县| 阳原县| 浦江县| 靖江市| 巴青县| 桂林市| 沅陵县| 嘉定区| 家居| 息烽县| 南阳市| 赞皇县| 穆棱市| 佛坪县| 武夷山市| 乌恰县| 苍山县| 宣城市| 始兴县| 博乐市| 海兴县|