如何使用lamda表达式对list进行求和
作者:爱钓鱼的Java 发布时间:2022-08-24 09:20:09
标签:lamda,表达式,list,求和
使用lamda表达式对list进行求和
Lambda 表达式是 JDK8 的一个新特性,最近写项目中求和计算使用的较多,写篇文章记录下。
1、实体类List返回Integer类型求和
//根据id查询库存
List<ProductStock> list = productStockMapper.selectList(Wrappers.<ProductStock>lambdaQuery().in(Product::id, idList))
//查询所有库存总和
Integer qtySum = list.stream().mapToInt(ProductStock::getStockQty).sum();
2、Integer类型List返回Integer类型求和
//查询当前所有商品库存
List<Integer> stockList = productStockMapper.selectStock();
//查询所有库存总和
Integer stockSum = stockList .stream().mapToInt(Integer::intValue).sum();
3、实体类List返回Bigdecimal类型求和
//根据id查询库存
List<ProductStock> list = productStockMapper.selectList(Wrappers.<ProductStock>lambdaQuery().in(Product::id, idList))
//查询所有库存金额总和
BigDecimal stockAmt = list .stream().map(ProductStock::getStockAmt).reduce(BigDecimal::add).orElse(Bigdecimal.ZERO);
4、BigDecimal类List返回Bigdecimal类型求和
//查询当前所有商品库存
List<Bigdecimal> stockList = productStockMapper.selectStock();
//查询所有库存金额总和
Bigdecimal stockAmt = stockList.stream().reduce(BigDecimal::add).orElse(Bigdecimal.ZERO);
**注:orElse(Bigdecimal.ZERO)而不是get(),是因为防止返回空(此处如果用get(),在idea中也会有警告)。
最近用到的就这些,后续用到别的还会再更新!
list与Lamda表达式配合的常用方法
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分,搜索中点值,发现值不对,就可以砍掉这个分组,只剩下一半再查找)
list.Sort();//二分查找前先必须先升序排序
int result = list.BinarySearch(e=>e%100==0);
11、对类(引用类型)进行排序(bookList.Sort()),需要类实现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;//返回正数,this>other;返回0,this=other;返回负数,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、对类(引用类型)进行二分查找(bookList.BinarySearch()),只能查找相应对象。如果只查找属性一致的对象,需重写Equals()方法,如上所示。
来源:https://blog.csdn.net/yuanwxcsdn/article/details/105663700


猜你喜欢
- 有些人可能对线程池比较陌生,并且更不熟悉线程池的工作原理。所以他们在使用线程的时候,多数情况下都是new Thread来实现多线程。但是,往
- 前言关于链表这一块,写了多篇博客,学习了顺序表、单链表、及其一些练习题顺序表:传送门:顺序表单链表:传送门:单链表1
- 本文实例讲述了C#实现彻底删除文件的方法。分享给大家供大家参考。具体实现方法如下:经常用360的文件粉碎,删除隐私文件貌似还不错的。不过C#
- Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口)、Org.apache接口和Android.n
- 需求是在我按下按钮时,该变按钮颜色,使用户感觉到自己按了按钮,当松开的时候,变回原来的颜色。正常时:按下时:有人说,直接监听按钮的按下事件不
- 本文开始做一个网上商城的项目,首先从搭建环境开始,一步步
- 这篇文章主要介绍了SpringBoot多模块项目框架搭建过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 求一个n阶行列式,一个比较简单的方法就是使用全排列的方法,那么简述以下全排列算法的递归实现。首先举一个简单的例子说明算法的原理,既然是递归,
- 一、在学习枚举之前,首先来听听枚举的优点。1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。2、枚举使代码更易于维护,有助于确保
- 1.File对象java封装的一个操作文件及文件夹(目录)的对象。可以操作磁盘上的任何一个文件和文件夹。2.创建文件方式一:根据路径构建一个
- 概述泛型机制在项目中一直都在使用,比如在集合中ArrayList<String, String>, Map<String,
- @Conditional的使用@Conditional可以根据条件来判断是否注入某些Bean。package com.morris.spri
- 需求分析文档可以和项目一起进行版本管理文档可以在线访问文档可以与springboot项目集成,不需要分开部署MarkDown支持文档跟随,打
- SpringBoot配置文件优先级前面SpringBoot基础有提到,关于SpringBoot配置文件可以是properties或者是yam
- 本文实例讲述了C#使用webbrowser的常见用法。分享给大家供大家参考。具体如下:判断是否网络正常private bool IsConn
- 本文以实例描述了C#实现让窗体永远在窗体最前面显示的方法,具体步骤如下:1、新建一个窗体程序,添加一个Timer以及设置它可用并绑定事件。2
- Android 校验email是否合法这个其实跟JAVA中是一样的。例子: String regEx = "^(([
- 一、延迟加载resultMap可以实现高级映射(使用association、collection实现一对一及一对多映射),associati
- 背景:写一个用户登录拦截,在网上找了一圈没找到好用的,于是自己试验了一下,总结出来,分享给大家。1.自定义登录 * LoginInterce
- 我就废话不多说了,大家还是直接看代码吧~package com.cloudtech.web.util; import java.io.Buf