簡(jiǎn)介
創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)靜安,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
lambda表達(dá)式是JAVA8中提供的一種新的特性,它支持Java也能進(jìn)行簡(jiǎn)單的“函數(shù)式編程”。
它是一個(gè)匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名,直接對(duì)應(yīng)于其中的lambda抽象(lambda abstraction),是一個(gè)匿名函數(shù),即沒有函數(shù)名的函數(shù)。
本文將介紹關(guān)于Java8 Lambda表達(dá)式的一些復(fù)雜用法,分享出來供大家參考學(xué)習(xí),下面來一起看看詳細(xì)的介紹:
復(fù)雜用法實(shí)例
傳入數(shù)組ids,在list
上操作,找出Obj中id想匹配的,并且按照id進(jìn)行collect成map(這里假設(shè)找出來的按照id不重復(fù))
@Override public MapgetOperationByShipmentIds(Collection ids) { return storage .stream() .filter(op -> ids.contains(op.getId())) .collect(Collectors.toMap(MyObj::getId, Function.identity())); }
接上面的,假設(shè)id可以重復(fù):
@Override public MapgetOperationByShipmentIds(Collection 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è)中
Listlist = services.stream() .flatMap(s -> s.getObjects().stream()) .collect(Collectors.toList());
類似wordCount計(jì)數(shù)
import java.util.*; import java.util.stream.*; class Test { public static void main(String[] args) { Listlist = new ArrayList<>(); list.add("Hello"); list.add("Hello"); list.add("World"); Map 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í)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。