Java8新特性Lambda表達(dá)式的一些復(fù)雜用法總結(jié)
簡(jiǎn)介
lambda表達(dá)式是JAVA8中提供的一種新的特性,它支持Java也能進(jìn)行簡(jiǎn)單的“函數(shù)式編程”。
它是一個(gè)匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名,直接對(duì)應(yīng)于其中的lambda抽象(lambda abstraction),是一個(gè)匿名函數(shù),即沒(méi)有函數(shù)名的函數(shù)。
本文將介紹關(guān)于Java8 Lambda表達(dá)式的一些復(fù)雜用法,分享出來(lái)供大家參考學(xué)習(xí),下面來(lái)一起看看詳細(xì)的介紹:
復(fù)雜用法實(shí)例
傳入數(shù)組ids,在list<Obj>
上操作,找出Obj中id想匹配的,并且按照id進(jìn)行collect成map(這里假設(shè)找出來(lái)的按照id不重復(fù))
@Override public Map<Integer, MyObj> getOperationByShipmentIds(Collection<Integer> ids) { return storage .stream() .filter(op -> ids.contains(op.getId())) .collect(Collectors.toMap(MyObj::getId, Function.identity())); }
接上面的,假設(shè)id可以重復(fù):
@Override public Map<Integer, MyObj> getOperationByShipmentIds(Collection<Integer> ids) { return storage .stream() .filter(op -> ids.contains(op.getId())) .collect(Collectors.groupingBy(MyObj::getId)); }
對(duì)象列表某一列求和
list.values().stream().mapToInt(obj -> obj.getIntField()).sum();
多個(gè)list追加到同一個(gè)中
List<MyObject> list = services.stream() .flatMap(s -> s.getObjects().stream()) .collect(Collectors.toList());
類(lèi)似wordCount計(jì)數(shù)
import java.util.*; import java.util.stream.*; class Test { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Hello"); list.add("Hello"); list.add("World"); Map<String, Long> counted = list.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); System.out.println(counted); } }
使用Lambda實(shí)現(xiàn)分段chunk
AtomicInteger counter = new AtomicInteger(); stream.collect(groupingBy(x->counter.getAndIncrement()/chunkSize)) .values() .forEach(database::flushChunk);
跑個(gè)題,上面的那個(gè)也可以用apache commons搞定
ListUtils.partition(list, batchSize)
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Java8新特性lambda表達(dá)式有什么用(用法實(shí)例)
- Java8新特性之Lambda表達(dá)式淺析
- Java8中l(wèi)ambda表達(dá)式的應(yīng)用及一些泛型相關(guān)知識(shí)
- Java8 Lambda表達(dá)式詳解及實(shí)例
- Java8中的 Lambda表達(dá)式教程
- Java8與Scala中的Lambda表達(dá)式深入講解
- Java8中的lambda表達(dá)式入門(mén)教程
- Java8 新特性Lambda表達(dá)式實(shí)例詳解
- 30分鐘入門(mén)Java8之lambda表達(dá)式學(xué)習(xí)
- Java8中Lambda表達(dá)式的理解與應(yīng)用
相關(guān)文章
Spring Cloud中使用Feign,@RequestBody無(wú)法繼承的解決方案
這篇文章主要介紹了Spring Cloud中使用Feign,@RequestBody無(wú)法繼承的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10hibernate存取json數(shù)據(jù)的代碼分析
這篇文章主要介紹了hibernate存取json數(shù)據(jù)的代碼分析,需要的朋友可以參考下2017-09-09一文搞懂spring boot本地事務(wù)@Transactional參數(shù)
這篇文章主要介紹了spring boot本地事務(wù)@Transactional參數(shù)詳解,本文通過(guò)示例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10Java分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)原理與用法詳解
這篇文章主要介紹了Java分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)原理與用法,結(jié)合實(shí)例形式分析了java分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、跳轉(zhuǎn)語(yǔ)句等相關(guān)概念、原理、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2020-02-02解決springboot 多線程使用MultipartFile讀取excel文件內(nèi)容報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了解決springboot 多線程使用MultipartFile讀取excel文件內(nèi)容報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09Spring配置文件無(wú)法讀取properties屬性的解決
這篇文章主要介紹了Spring配置文件無(wú)法讀取properties屬性的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03