如何使用lamda表達(dá)式對(duì)list進(jìn)行求和
使用lamda表達(dá)式對(duì)list進(jìn)行求和
Lambda 表達(dá)式是 JDK8 的一個(gè)新特性,最近寫(xiě)項(xiàng)目中求和計(jì)算使用的較多,寫(xiě)篇文章記錄下。
1、實(shí)體類List返回Integer類型求和
//根據(jù)id查詢庫(kù)存 List<ProductStock> list = productStockMapper.selectList(Wrappers.<ProductStock>lambdaQuery().in(Product::id, idList)) //查詢所有庫(kù)存總和 Integer qtySum = list.stream().mapToInt(ProductStock::getStockQty).sum();
2、Integer類型List返回Integer類型求和
//查詢當(dāng)前所有商品庫(kù)存 List<Integer> stockList = productStockMapper.selectStock(); //查詢所有庫(kù)存總和 Integer stockSum = stockList .stream().mapToInt(Integer::intValue).sum();
3、實(shí)體類List返回Bigdecimal類型求和
//根據(jù)id查詢庫(kù)存 List<ProductStock> list = productStockMapper.selectList(Wrappers.<ProductStock>lambdaQuery().in(Product::id, idList)) //查詢所有庫(kù)存金額總和 BigDecimal stockAmt = list .stream().map(ProductStock::getStockAmt).reduce(BigDecimal::add).orElse(Bigdecimal.ZERO);
4、BigDecimal類List返回Bigdecimal類型求和
//查詢當(dāng)前所有商品庫(kù)存 List<Bigdecimal> stockList = productStockMapper.selectStock(); //查詢所有庫(kù)存金額總和 Bigdecimal stockAmt = stockList.stream().reduce(BigDecimal::add).orElse(Bigdecimal.ZERO);
**注:orElse(Bigdecimal.ZERO)而不是get(),是因?yàn)榉乐狗祷乜眨ù颂幦绻胓et(),在idea中也會(huì)有警告)。
最近用到的就這些,后續(xù)用到別的還會(huì)再更新!
list與Lamda表達(dá)式配合的常用方法
1、刪除所有值為400的元素
list.RemoveAll(e=>e==400);
2、刪除所有能被100整除的元素
list.RemoveAll(e=>e%100==0);
3、求和
int sum=0; int result = list.ForEach(val=>sum+=val);
4、刪除所有值為400的元素
bool result = list.Exists(e=>e==400)
5、是否所有的元素都等于400
bool result = list.TrueForAll(e=>e==400)
6、返回能被100整除的元素(從前向后找)
var result = list.Find(e=>e%100==0);
6、返回能被100整除的元素(從后向前找)
var result = list.FindLast(e=>e%100==0);
7、返回能被100整除的List
var result = list.FindAll(e=>e%100==0);
8、返回能被100整除的索引(從前向后找)
int result = list.FindIndex(e=>e%100==0);
9、返回能被100整除的索引(從后向前找)
int result = list.FindLastIndex(e=>e%100==0);
10、二分查找(速度較快,它的原理是先把排序好的list分成2分,搜索中點(diǎn)值,發(fā)現(xiàn)值不對(duì),就可以砍掉這個(gè)分組,只剩下一半再查找)
list.Sort();//二分查找前先必須先升序排序 int result = list.BinarySearch(e=>e%100==0);
11、對(duì)類(引用類型)進(jìn)行排序(bookList.Sort()),需要類實(shí)現(xiàn)IComparable接口
internal class Book : IComparable<Book> { ?? ?public int ID { get; set; } ?? ?public string Name { get; set; } ?? ?public double Price { get; set; } ?? ?public int CompareTo([AllowNull] Book other) ?? ?{ ?? ??? ?if (other == null) return 1; ?? ??? ?return this.ID - other.ID;//返回正數(shù),this>other;返回0,this=other;返回負(fù)數(shù),this<other; ?? ?} ?? ?public override string ToString() ?? ?{ ?? ??? ?return JsonSerializer.Serialize(this); ?? ?} ?? ?public override bool Equals(object obj) ?? ?{ ?? ??? ?if (obj == null) return false; ?? ??? ?Book other = obj as Book; ?? ??? ?if (other.ID == this.ID && other.Name == this.Name && other.Price == this.Price) return true; ?? ??? ?return false; ?? ?} }
12、對(duì)類(引用類型)進(jìn)行二分查找(bookList.BinarySearch()),只能查找相應(yīng)對(duì)象。如果只查找屬性一致的對(duì)象,需重寫(xiě)Equals()方法,如上所示。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談java String.split丟失結(jié)尾空字符串的問(wèn)題
下面小編就為大家?guī)?lái)一篇淺談java String.split丟失結(jié)尾空字符串的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02Springboot整合SpringSecurity的完整案例詳解
Spring Security是基于Spring生態(tài)圈的,用于提供安全訪問(wèn)控制解決方案的框架,Spring Security登錄認(rèn)證主要涉及兩個(gè)重要的接口 UserDetailService和UserDetails接口,本文對(duì)Springboot整合SpringSecurity過(guò)程給大家介紹的非常詳細(xì),需要的朋友參考下吧2024-01-01Java swing實(shí)現(xiàn)酒店管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java swing實(shí)現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02SpringBoot利用@Validated注解優(yōu)雅實(shí)現(xiàn)參數(shù)校驗(yàn)
在開(kāi)發(fā) Web 應(yīng)用時(shí),用戶輸入的合法性校驗(yàn)是保障系統(tǒng)穩(wěn)定性的基礎(chǔ),?Spring Boot 的 @Validated 注解 提供了一種更優(yōu)雅的解決方案,下面就跟隨小編一起學(xué)習(xí)一下吧2025-04-04解決DataInputStream?read不等于-1,socket文件傳輸只能傳輸一個(gè)文件無(wú)法傳輸多個(gè)問(wèn)題
這篇文章主要介紹了解決DataInputStream?read不等于-1,socket文件傳輸只能傳輸一個(gè)文件無(wú)法傳輸多個(gè)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08在SpringBoot中更改默認(rèn)端口的方法總結(jié)
在本文中,小編將帶大家學(xué)習(xí)如何在 Spring Boot 中更改默認(rèn)端口,默認(rèn)情況下,嵌入式 Web 服務(wù)器使用 8080端口來(lái)啟動(dòng) Spring 引導(dǎo)應(yīng)用程序,有幾種方法可以更改該端口,文中介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07kafka生產(chǎn)者和消費(fèi)者的javaAPI的示例代碼
這篇文章主要介紹了kafka生產(chǎn)者和消費(fèi)者的javaAPI的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06