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()));