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)));
后边如果有实用的stream操作技巧也会持续更新这个文档。如果对你有用的话点个赞呗!

版权声明:本文为Jeck_wu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。