总结-关于stream流的利用

文章目录

  • 前言
  • 一、需求
    • 二、我的写法
  • 三、优化后的写法
  • 总结


前言

在工作中遇到了一个需求,很费劲的写了出来,但是导师看了直摇头,一顿操作帮我修改了,修改之后代码非常简洁,现对这部分做一个回顾总结。


一、需求

需求大概为有一个a表 表中有一个id字段关联另一张表b,id可能不止一个,多个id用,分隔 需要取出b表中对应的数据并将它们拼接起来。

二、我的写法

首先id是以,分割的那么我使用了spilt函数将字符串按逗号分隔成了字符串数组

 String[] parts = projectDO.getSpecificCommodityIds().split(",");

然后因为我们这个项目中b表的数据非常小,这样就没有必要进行连表查询,直接查一次出来转换为map集合

 List<SpecificDockCommodityDO> list=specificDockCommodityDAO.selectAll();
 Map<Long, String> map = list.stream().collect
 (Collectors.toMap(SpecificDockCommodityDO::getSpecificDockCommodityId, SpecificDockCommodityDO::getSpecificDockCommodityName));

然后只要拿着parts中的id去map集合中找就行,然后找到的数据再进行一个拼接

 for(int i=0;i<parts.length;i++)
{
   if(map.get(Long.parseLong((parts[i]))).isEmpty())
   {
        commodity+=map.get(Long.parseLong((parts[i])));
        commodity+=",";
    }
}

由于最后逗号需要去除所以还要加一个判断

 if (commodity.endsWith(",")) {
        commodity = commodity.substring(0, commodity.length() - 1);
}

三、优化后的写法

 //获取组装商品对接名称
if (!projectDO.getSpecificCommodityIds().isEmpty()) {
String commodityNames = Arrays.stream(projectDO.getSpecificCommodityIds().split(","))
.map(commodityById::get).filter(Objects::nonNull).collect(Collectors.joining(","));
}

可以看到直接用.map将分割好的commodityid当作参数传入了commodityById的get方法中同时使用filter过滤掉了为空的数据 最后利用joining函数把他们按照逗号分隔,拼接起来便可,这样操作更加简洁,简化了代码而且更加高效

总结

以后对这种集合还有字符串的操作 可以优先考虑使用到stream流来进行操作

你可能感兴趣的:(工作总结,java)