Stream流的基本知识:
什么是Stream
流(Stream):是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。
“集合讲的是数据,流讲的是计算”
注意:
Stream自己不会存储元素
Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream。
Stream操作是延迟执行的,这意味着他们会等到需要结果的时候才执行。
Stream的操作三个步骤:
创建Stream:获取一个流
中间操作:一个中间操作链,对数据源的数据进行处理
终止操作:一个终止操作,执行中间操作链,并产生结果
创建Stream:
当数据源是集合的话:两种方法:.stream();返回一个顺序流
.parallelStream();返回一个并行流
当数据源是数组的话:.stream( T [ ] array);返回一个流
当数据源是零散的数据的话:.of();它可用接收任意数量的参数
中间操作:一共四个方法
filter过滤(Predicate p):在里面传一个返回值是布尔值的判断条件,如果结果是true,流里面的数据会保留
distinct():去重,把重复的数据给去掉
limit(long maxSize):截断流,类似于数据库的分页算法
skip(long n):忽略,跳过,可以配合截断来使用
map(Function f):映射,接收一个函数作为参数,映射成一个新的数据
sorted():排序
reduce():规约
发布文章的流程(业务流程,涉及表,具体实现):
校验参数;
判断当前自媒体用户是否是登录状态,如果满足条件将传过来的属性拷贝到文章信息中;
如果当前的封面状态为自动生成状态,先将状态设置为null,后边处理;
将前端传过来的images数组转换成字符串格式;
保存或者修改文章:
补全文章信息,校验参数,如果id为空保存文章,如果id不为空,删除素材与文章的关联关系,修改文章,如果当前素材状态为1,发送消息等待审核;
设置内容和封面与素材的关联:从文章内容中抽取图片列表,将内容转换为map集合,遍历集合,拿到集合中key为image的值。如果不是草稿,设置抽取图片与素材关联关系,设置封面与图片素材关联关系,保存素材与文章关联关系。如果封面类型为自动生成,首先获取dto中的images封面图数组,如果图片数量大于2,为多图,使用Stream截取三张,如果图片数量小于等于2张,设为单图,其他情况设为无图,最后将图片数组转换为字符串保存到images字段中,修改文章信息;
根据图片列表以及用户ID获取到素材列表,将素材列表转换为map集合,key为图片url value为素材id,判断所有图片在素材中是否存在,如果不存在返回提示信息,最后得到存在的素材id列表,与newsid及type进行批量保存。