栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java8 Stream流、Optional的用法总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java8 Stream流、Optional的用法总结

java8 Stream流、Optional的用法总结

1.分组

 Map> collectMap = list.stream().collect(Collectors.groupingBy(p -> p.getProductNo(), Collectors.toList()));

2.list转map

 Map proDTOMap = list.stream().collect(Collectors.toMap(PurchaseDetailDTO::getProductNo, p->p,(p1,p2)->p1));

3.计算集合某元素之和

 BigDecimal reduce = typeList.stream().map(m -> m.getCategoryDTO().getTaxAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);

4.分组计算某元素之和

  Map numMap = list.stream().collect(Collectors.groupingBy(p -> p.getGroupId(), Collectors.reducing(
                BigDecimal.ZERO,
                QuoteStatics::getNum,
                ArithUtil::add2)));

5.list转嵌套map

  Map> borrowMap = list.stream().collect(Collectors.groupingBy(CrmBorrowSummary::getUserId, Collectors.toMap(CrmBorrowSummary::getProductId, v -> v)));

6.list循环拼接字符串

  String productStr = detailDTOList.stream().map(v -> v.getProductName() + "," + v.getNum() + v.getProductUnit() + "," +
                    v.getSupplyName() + "," + v.getPrice() + "元/" + v.getProductUnit() + "," +
                    "协议" + v.getSupplyPrice() + "元/" + v.getProductUnit())
                    .collect(Collectors.joining("n"));

Optional的用法
1.结合filter、ifPresent、orElseThrow等用法

Optional.ofNullable(deliverPlanDTO).filter(v -> StringUtils.isEmpty(v.getContractNo())).ifPresent(v ->
                message.setStatus(CommonStatus.WAIT_APPROVE));				
Optional.ofNullable(groupId).filter(StringUtils::isNotBlank).orElseThrow(
				()-> new CommonException(ReturnCode.FAILED, "common.error", new String[]{"参数不正确!"}));
Optional.ofNullable(message.getToUsers()).filter(CollectionUtils::isNotEmpty).ifPresent(users -> {
            users.stream().filter(v -> PersonType.TO.equals(v.getType()))
                    .filter(v -> CommonStatus.CLOSE.equals(v.getStatus()))
                    .forEach(v -> v.setStatus(CommonStatus.NORMAL));
        });

2.取代if/else的判断

CrmQuoteFee fee=beanMapper.toCrmQuoteFee(reqdto);
Optional.ofNullable(reqdto.getId())
	.map(u->fee.setModifyBy(reqdto.getCreateBy()))
	.orElseGet(()->fee.setCreateBy(reqdto.getCreateBy()));
Optional.ofNullable(reqdto.getId())
	.map(u->fee.setModifyBy(reqdto.getCreateBy()))
	.orElseGet(()->{
		fee.setCanDel(Boolean.TRUE);
		fee.setType("1");
		return fee;
	}
  );

3.链式调用,中间任意环节为null则返回

String managerStr = Optional.ofNullable(project).map(Project::getAgentId).map(crmCustomerDao::getCrmCustomerById).map(CrmCustomer::getCustomerManagerId).map(userService::getUserInfoByUserId)
.map(m -> "(" + m.getName() + "," + m.getMobile() + ")").orElse(null);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/425100.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号