Java中List使用Stream流的常用方法

Java资深小白,不足之处,或者有任何错误欢迎指出。	--蓝紫

获取List中某一字段的集合

获取deps中单位主键[id]集合

List<Long> depIds = deps.stream().map(OrgDep::getId).collect(Collectors.toList());

//去重获取单位编号
List<String> depCodes = deps.stream().distinct().map(OrgDep::getCode).collect(Collectors.toList());

逗号分隔指定字段

获取所有单位名字,中文逗号分割

 //方式一
 String names = deps.stream().map(OrgDep::getName).collect(Collectors.joining(","));
 
//方式二
 String depNames = String.join(",", deps.stream().map(OrgDep::getName).collect(Collectors.toList()));

//特别说明  list 和 String 使用逗号互转
//将逗号分隔的字符串转换为List
List<String> list = Arrays.asList(str.split(","));

List<String> list = Arrays.asList(StringUtils.split(str, ","));

//将list转化为逗号分割的字符串
String str = String.join(",", list);

String str = StringUtils.json(list.toArray(), ",");  

List转为map

将deps集合转为map,key为主键[id], value为单位[OrgDep]本身。

Map<Long, OrgDep> depMap = deps.stream().collect(Collectors.toMap(OrgDep::getId, e -> e));

filter条件过滤后count统计

获取deps集合中状态为1的所有数量和

//BusinessStateEnum.AUDITING.getCode() 值为常量"1"
long executingNum = deps.stream().filter(e -> e.getState()
						.equals(BusinessStateEnum.AUDITING.getCode())).count();

对List进行sorted排序、limit限制

//获取资产价格最高的单位
List<OrgDep> expensiveDep = deps.stream().sorted(Comparator.comparing(OrgDep::getAssetPrice))
								.limit(1).collect(Collectors.toList());
	
//获取资产价格最低的单位
List<OrgDep> cheapDep = deps.stream().sorted(Comparator.comparing(OrgDep::getAssetPrice).reversed())
							.limit(1).collect(Collectors.toList());

求和方法

BigDecimal求和

获取deps集合中所有资产价格[assetsPrice]的累加值

BigDecimal total = deps.stream().map(OrgDep::getAssetPrice).reduce(BigDecimal.ZERO, BigDecimal::add);

数值类型求和

获取deps集合中所有资产价格[assetsPrice]的累加值

//int integer
int sumNum = deps.stream().mapToInt(OrgDep::getNum).sum();

//double
double sumArea = deps.stream().mapToDouble(OrgDep::getArea).sum();

//long Long
long sumId = deps.stream().mapToLong(OrgDep::getId).sum();

String转BigDecimal求和

//方式一
BigDecimal reduce = deps.stream().map(OrgDep::getCode).map(BigDecimal::new)
						.reduce(BigDecimal.ZERO, BigDecimal::add);

//方式二
BigDecimal reduce1 = deps.stream().map(e->new BigDecimal(e.getCode()))
						 .reduce(BigDecimal.ZERO, BigDecimal::add);

比较两个List重复部分

//获取单位中所有的父级编号
 String codes = deps.stream().map(OrgDep::getParentCode).collect(Collectors.joining(","));
 
//根据逗号拆分编号
List<String> parentCodes = Arrays.asList(StringUtils.split(codes, ","));

// depCodes对比父级编号重合部分编号(即depCodes中含有parentCodes的集合)
List<String> repeatDepCodes = depCodes.stream().filter(parentCodes::contains)
									  .collect(Collectors.toList());

使用GroupingBy分组

根据父级编号[parentCode]分组,可用于获取同一父级编号下的所有单位

 Map<String, List<OrgDep>> parentChildMap = deps.stream().collect(
 											    Collectors.groupingBy(e -> e.getParentCode()));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值