Java8 Stream实用操作

Java8 Stream实用操作

​ 在工作中经常碰到类似的需求,不太会数据库操作,或者不方便用sql来处理,那java8的stream流处理最合适了!

​ 下面一些操作就是我做的需求中经常用到的。

1.数组/集合转字符串,并且按照设定的字符串分隔
resourceGroupId = 
    Arrays.stream(resourceGroupId.split(",")).map(s -> "'" + s + "'").collect(Collectors.joining(","));
2.把集合中对象的两个属性转成map
HashMap<Object, Object> runtimeBaseInfoKeyMap =
    robotCollectIndexData.stream().collect(HashMap::new, (k, v) -> k.put(v.getRobotName(), v), HashMap::putAll);
3.集合返回对象
// 没找到就报错
DDJitModel ddJitModelFind = ddJitUnmatchDateList.stream()
                    .filter(ddJitModel -> settlementKey.equals(ddJitModel.getPlantCode() + "&" + ddJitModel.getOrderNum() + "&" + ddJitModel.getPartNum()))
                    .findAny().orElseThrow(() -> new IllegalStateException("结算数据没找到DDJIT数据!!"));
// 没找到赋null   .findFirst/findAny().orElse(null);
// findFirst :如果有条件匹配到第一个则返回  findAny:匹配到随机返回一个  区别是在于你操作该集合用的是串行流/并行流 
4.获取结合集合中对象的某个属性的最大/最小值
//  如果有条件,需确保get()方法不为空,就是能通过条件匹配到一个list 不然就会报错
Date compDate = DateUtil.parseDateExp(tjjsonForrptUnmatchDataModelList.stream()
                        .filter(tjjsonForrptUnmatchDataModel -> !ObjectUtils.isEmpty(tjjsonForrptUnmatchDataModel.getComp_time()))                     .min(Comparator.comparing(TJJSONForrptUnmatchDataModel::getComp_time)).get().getComp_time());
5.根据某几个字段分组
// 通过某个属性分组
Map<String, List<ReConsignSaleWriteoffModel>> listGroupBySapDeliverGoodsNo = sapDGNisNotBlank.stream().collect(
				Collectors.groupingBy(ReConsignSaleWriteoffModel::getSap_deliver_goods_no));

// 通过某几个属性分组 并计算金额
Map<String, BigDecimal> byInoviceAndPnNOAndPrice = inLockData.stream().collect(Collectors.groupingBy(rpaDataTOSendModel ->
										rpaDataTOSendModel.getInvoice_no() + "&" +
												rpaDataTOSendModel.getPn_no() + "&" +
												rpaDataTOSendModel.getExternal_sale_unit_price() + "&" +
												rpaDataTOSendModel.getSap_unique_no() + "&" +
												rpaDataTOSendModel.getSap_unique_line_no(),								CollectorsUtil.summingBigDecimal(RPADataTOSendModel::getAccomplish_qty)));
6.通过一个list返回一个map<属性,对象> or map<属性,对象的值>
            Map<String, MaintenanceProcessesConfigVo> processConfigByGroup = processConfigByGardenId.stream().collect(Collectors.toMap(MaintenanceProcessesConfigVo::getProcess_id, a -> a, (k1, k2) -> k1));
            
            Map<String, String> processConfigByGroup = processConfigByGardenId.stream().collect(Collectors.toMap(MaintenanceProcessesConfigVo::getProcess_id, a -> a.getWorkshop_type(), (k1, k2) -> k1));

后边如果有实用的stream操作技巧也会持续更新这个文档。如果对你有用的话点个赞呗!
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值