您好,登錄后才能下訂單哦!
簡介
lambda表達(dá)式是JAVA8中提供的一種新的特性,它支持Java也能進(jìn)行簡單的“函數(shù)式編程”。
它是一個匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名,直接對應(yīng)于其中的lambda抽象(lambda abstraction),是一個匿名函數(shù),即沒有函數(shù)名的函數(shù)。
本文將介紹關(guān)于Java8 Lambda表達(dá)式的一些復(fù)雜用法,分享出來供大家參考學(xué)習(xí),下面來一起看看詳細(xì)的介紹:
復(fù)雜用法實例
傳入數(shù)組ids,在list<Obj>
上操作,找出Obj中id想匹配的,并且按照id進(jìn)行collect成map(這里假設(shè)找出來的按照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)); }
對象列表某一列求和
list.values().stream().mapToInt(obj -> obj.getIntField()).sum();
多個list追加到同一個中
List<MyObject> list = services.stream() .flatMap(s -> s.getObjects().stream()) .collect(Collectors.toList());
類似wordCount計數(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實現(xiàn)分段chunk
AtomicInteger counter = new AtomicInteger(); stream.collect(groupingBy(x->counter.getAndIncrement()/chunkSize)) .values() .forEach(database::flushChunk);
跑個題,上面的那個也可以用apache commons搞定
ListUtils.partition(list, batchSize)
總結(jié)
以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。