Java8新特性Lambda表達式的一些復(fù)雜用法總結(jié)
簡介
lambda表達式是JAVA8中提供的一種新的特性,它支持Java也能進行簡單的“函數(shù)式編程”。
它是一個匿名函數(shù),Lambda表達式基于數(shù)學(xué)中的λ演算得名,直接對應(yīng)于其中的lambda抽象(lambda abstraction),是一個匿名函數(shù),即沒有函數(shù)名的函數(shù)。
本文將介紹關(guān)于Java8 Lambda表達式的一些復(fù)雜用法,分享出來供大家參考學(xué)習(xí),下面來一起看看詳細的介紹:
復(fù)雜用法實例
傳入數(shù)組ids,在list<Obj>上操作,找出Obj中id想匹配的,并且按照id進行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í)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
多線程Thread,Runnable,Callable實現(xiàn)方式
這篇文章主要為大家詳細介紹了Java多線程如何實現(xiàn)Thread,Runnable,Callable的方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
Maven多模塊之父子關(guān)系的創(chuàng)建
這篇文章主要介紹了Maven多模塊之父子關(guān)系的創(chuàng)建,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
SpringBoot2 整合Ehcache組件,輕量級緩存管理的原理解析
這篇文章主要介紹了SpringBoot2 整合Ehcache組件,輕量級緩存管理,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
Java8接口中引入default關(guān)鍵字的本質(zhì)原因詳析
Default方法是在java8中引入的關(guān)鍵字,也可稱為Virtual extension methods—虛擬擴展方法,這篇文章主要給大家介紹了關(guān)于Java8接口中引入default關(guān)鍵字的本質(zhì)原因,需要的朋友可以參考下2022-01-01

