-
list.parallelStream()操作線程不安全的數(shù)據(jù)集合時(shí)存在線程不安全的問題。
解決list.parallelStream()并行流線程安全的方式:
List<Integer> list4 = list1.parallelStream().collect(Collectors.toList());
或者直接使用線程安全的集合來保證線程安全 collect()/reduce()等線程安全的終斷操作來保證線程安全問題
結(jié)論:
Stream并行安全的問題,在業(yè)務(wù)處理的過程中,主要通過自定義編碼添加線程鎖的方式,或者使用Stream api中提供的線程安全的終端操作來完成執(zhí)行過程,但是在更多的場景中,如果我們遇到多線程問題會(huì)直接使用線程安全的集合來規(guī)范數(shù)據(jù)源。
查看全部 -
jvm在內(nèi)部生成一個(gè)靜態(tài)方法,也生成了一個(gè)匿名內(nèi)部類且實(shí)現(xiàn)了Lambda的目標(biāo)類型接口,然后調(diào)用了一下生成的靜態(tài)方法。
查看全部 -
總結(jié):
lambda表達(dá)式中變量操作優(yōu)化了匿名內(nèi)部類型中this關(guān)鍵字;
不在單獨(dú)建立對(duì)象作用域,表達(dá)式本身就是所屬類型對(duì)象的一部分,在語法語義上使用更加簡潔。
查看全部 -
JDK8中為什么要提供lambda表達(dá)式這種新技術(shù)的語法糖呢?
因?yàn)樵陧?xiàng)目開發(fā)中,我們經(jīng)常會(huì)有代碼質(zhì)量控制這樣的要求,讓編寫的代碼更加趨于數(shù)據(jù)的有效處理,也就是編碼即數(shù)據(jù)的開發(fā)模式,也就是Model Code as Data。
Model Code as Data盡可能輕量級(jí)的將代碼封裝為數(shù)據(jù)。這種操作模式在傳統(tǒng)的編碼中通過接口以及實(shí)現(xiàn)類的方式(或者匿名內(nèi)部類的方式)完成功能的處理,但傳統(tǒng)的這種模式下存在大量的問題。
- 語法冗余:在傳統(tǒng)的編碼中和數(shù)據(jù)處理無關(guān)的代碼較多;
- this關(guān)鍵字:在匿名內(nèi)部類處理方式中,this關(guān)鍵字在內(nèi)部類型中,它的變量綁定以及變量訪問存在很大的誤區(qū);
- 變量捕獲:匿名內(nèi)部類型中對(duì)于當(dāng)前在內(nèi)部類型的處理會(huì)有特殊的要求;
- 數(shù)據(jù)控制:并不是特別的友好。
查看全部 -
函數(shù)式接口和Lambda表達(dá)式的關(guān)系
查看全部 -
stream 操作集合數(shù)據(jù)下
查看全部 -
stream操作集合獲取stream方法
查看全部 -
stream常用api
查看全部 -
1
查看全部 -
方法重載對(duì)lambda表達(dá)式的影響。也可以使用lambad /** ?*?方法重載對(duì)lambda表達(dá)式的影響 ?*/ public?class?App4?{ ????interface?Param1?{ ????????void?outInfo(String?info); ????} ????interface?Param2?{ ????????void?outInfo(String?info); ????} ????interface?Param3?{ ????????void?outInfo(String?info,?int?index); ????} ????interface?Param4?{ ????????void?outInfo(String?info,?int?index); ????} ????public?void?lambdaMethod_1(Param1?param)?{ ????????param.outInfo("hello?param1?imooc"); ????} ????public?void?lambdaMethod_1(Param2?param)?{ ????????param.outInfo("hello?param1?imooc"); ????} ????public?void?lambdaMethod_2(Param1?param,?int?index)?{ ????????param.outInfo("hello?param1?imooc---"?+?index); ????} ????public?void?lambdaMethod_2(Param2?param,?int?index)?{ ????????param.outInfo("hello?param1?imooc---"?+?index); ????} ????public?void?lambdaMethod_3(Param3?param,?int?index)?{ ????????param.outInfo("hello?Param3?imooc",?index); ????} ????public?void?lambdaMethod_3(Param4?param,?int?index)?{ ????????param.outInfo("hello?param4?imooc",?index); ????} ????public?static?void?main(String[]?args)?{ ????????App4?app?=?new?App4(); ????????app.lambdaMethod_1(new?Param1()?{ ????????????@Override ????????????public?void?outInfo(String?info)?{ ????????????????System.out.println(info); ????????????} ????????}); ????????app.lambdaMethod_1(new?Param2()?{ ????????????@Override ????????????public?void?outInfo(String?info)?{ ????????????????System.out.println(info); ????????????} ????????}); ????????app.lambdaMethod_2(new?Param1()?{ ????????????@Override ????????????public?void?outInfo(String?info)?{ ????????????????System.out.println(info); ????????????} ????????},?1); ????????app.lambdaMethod_2(new?Param2()?{ ????????????@Override ????????????public?void?outInfo(String?info)?{ ????????????????System.out.println(info); ????????????} ????????},?2); ????????app.lambdaMethod_3(new?Param3()?{ ????????????@Override ????????????public?void?outInfo(String?info,?int?index)?{ ????????????????System.out.println(info?+?"#############"?+?index); ????????????} ????????},?3); ????????app.lambdaMethod_3(new?Param4()?{ ????????????@Override ????????????public?void?outInfo(String?info,?int?index)?{ ????????????????System.out.println(info?+?"#############"?+?index); ????????????} ????????},?4); ????????System.out.println("--------------------------------------------------------------------------"); ????????app.lambdaMethod_1((Param1)?info?->?{ ????????????System.out.println(info); ????????}); ????????app.lambdaMethod_1((Param2)?info?->?{ ????????????System.out.println(info); ????????}); ????????app.lambdaMethod_2((Param1)?info?->?{ ????????????System.out.println(info); ????????},?3); ????????app.lambdaMethod_2((Param2)?info?->?{ ????????????System.out.println(info); ????????},?4); ????????app.lambdaMethod_3((Param3)?(info,?index)?->?{ ????????????System.out.println(info?+?"#############"?+?index); ????????},5); ????????app.lambdaMethod_3((Param4)?(info,?index)?->?{ ????????????System.out.println(info?+?"#############"?+?index); ????????},5); ????} }
查看全部 -
無參數(shù)
查看全部 -
jdk原生里面原來就有這么多很棒的封裝,很厲害。
/**
* java.util.function 包提供了大量函數(shù)式接口
*
* 1. Predicate ? ? 接收參數(shù)T對(duì)象,返回boolean類型的結(jié)果
* 2. Consumer ? ? ?接收參數(shù)T對(duì)象,沒有返回值
* 3. Function ? ? ?接收參數(shù)T對(duì)象,返回R對(duì)象
* 4. Supplier ? ? ?不接收任何參數(shù),直接通過get()獲取指定值
* 5. UnaryOperator 接口參數(shù)T對(duì)象,執(zhí)行業(yè)務(wù)處理后,返回更新后的T對(duì)象
* 6. BinaryOperator 接口接收兩個(gè)T對(duì)象,執(zhí)行業(yè)務(wù)處理后,返回T對(duì)象
*/查看全部 -
2
查看全部 -
1
查看全部 -
1
查看全部 -
1
查看全部
舉報(bào)