项目需要对一个list人员表某个字段赋值,我的做法是for出来列表然后查询外键取到值再把值赋进返回的page返回体中,我觉得使用for循环是不是比较低效,担心的是以后上线的话人员多起来,那绝对是一个灾难,所以想找一种性能好一点的实现方法。希望有人能提供帮助。
批量查询,以外键为key,取道的值为value,再遍历list赋值,复杂度就不是之前的n方了
list stream流
打个比方,返回的集合对象里有一个relationId,还有一个relationName(但是为空),现在需要根据relationId查询到relationName,然后赋值回去,是这个意思吗?
如果是,stream流很快
List<String> relationIds = pageVOs.stream().map(PageVO::getRelationId).collect(Collectors.toList());
List<RelationVO> relationVOs = relationDao.selectByRelationIds(relationIds);
Map<String,String> relationMap = relationVOs.stream().collect(Collectors.toMap(RelationVO::getRelationId,RelationVO::getRelationName,(k1,k2)->k1));
pageVOs.foreach(item->{
item.setRelationName(relationMap.get(item.getRelationId()));
});
看了前面的回答和题主的问题。猜测场景是这样的:有list表和外键表,其中list表的外键字段是外键表的主键,现在需要用外键表的某个字段赋值给list表的某个字段。
如果是这样,那先关联查询出一个实体类,在利用java8的list特性stream顺序流或者(对前后顺序没有要求的话)parallelStream并发流一行代码搞定且流的效率比for循环高很多
看起来我还得去了解学习下流了,三个人都推荐了流。