Stream流的基本知识:

  1. 什么是Stream
  2. 流(Stream):是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。
  3. “集合讲的是数据,流讲的是计算”
  4. 注意:
  5. Stream自己不会存储元素
  6. Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream
  7. Stream操作是延迟执行的,这意味着他们会等到需要结果的时候才执行。
  8. Stream的操作三个步骤:
  9. 创建Stream:获取一个流
  10. 中间操作:一个中间操作链,对数据源的数据进行处理
  11. 终止操作:一个终止操作,执行中间操作链,并产生结果
  12. 创建Stream:
  13. 当数据源是集合的话:两种方法:.stream();返回一个顺序流
  14. .parallelStream();返回一个并行流
  15. 当数据源是数组的话:.stream( T [ ] array);返回一个流
  16. 当数据源是零散的数据的话:.of();它可用接收任意数量的参数
  17. 中间操作:一共四个方法
  18. filter过滤(Predicate p):在里面传一个返回值是布尔值的判断条件,如果结果是true,流里面的数据会保留
  19. distinct():去重,把重复的数据给去掉
  20. limitlong maxSize):截断流,类似于数据库的分页算法
  21. skiplong n):忽略,跳过,可以配合截断来使用
  22. mapFunction f):映射,接收一个函数作为参数,映射成一个新的数据
  23. sorted():排序
  24. reduce():规约

发布文章的流程(业务流程,涉及表,具体实现):

校验参数;

判断当前自媒体用户是否是登录状态,如果满足条件将传过来的属性拷贝到文章信息中;

如果当前的封面状态为自动生成状态,先将状态设置为null,后边处理;

将前端传过来的images数组转换成字符串格式;

保存或者修改文章:
    补全文章信息,校验参数,如果id为空保存文章,如果id不为空,删除素材与文章的关联关系,修改文章,如果当前素材状态为1,发送消息等待审核;
    设置内容和封面与素材的关联:从文章内容中抽取图片列表,将内容转换为map集合,遍历集合,拿到集合中key为image的值。如果不是草稿,设置抽取图片与素材关联关系,设置封面与图片素材关联关系,保存素材与文章关联关系。如果封面类型为自动生成,首先获取dto中的images封面图数组,如果图片数量大于2,为多图,使用Stream截取三张,如果图片数量小于等于2张,设为单图,其他情况设为无图,最后将图片数组转换为字符串保存到images字段中,修改文章信息;
    根据图片列表以及用户ID获取到素材列表,将素材列表转换为map集合,key为图片url  value为素材id,判断所有图片在素材中是否存在,如果不存在返回提示信息,最后得到存在的素材id列表,与newsid及type进行批量保存。