关于使用Map封装查询返回数据的记录

从数据库查询出数据后并需要把他们和其他数据封装并一起返回时:

  • 使用Map<主键,类>先进行封装,这样在后续要用id进行查找时会提高效率
  • 例:
List<BookInfo> bookInfoList = bookInfoRepository.findAllBy(libraryId);//根据图书馆id查出一个bookInfo类的列表
List<Long> bookIdList = bookInfoList.stream().map(BookInfo::getBookId).collect(Collectors.toList());//拿到所有的bookId
List<Book> bookList = bookRepository.findAllById(bookIdList);//查到所有的Book实体

我需要从这两个类里组合数据返回BookDto,那么在使用stream流去进行操作的情况下,我可以使用Map<bookId, Book> 去先进行封装,这么做的好处:

  1. 快速查找和访问元素:可以根据bookId以O(1)的时间复杂度得到对应的Book
  2. 可以保证数据的唯一性,防止有重复元素

做法:

Map<Long, BookInfo> assambleCollection = bookInfoList.stream().collect(Collectors.toMap(BookInfo::getBookId, Function.identity()));//封装成一个map加快查询
List<BookDto> returnList = bookList.stream().map(book -> {
    BookDto bookDto = new BookDto(book, assambleCollection.get(book.getBookId()));//这里可以根据需要写一个构造函数
    // 可以在这set一些其他值
    return bookDto;
})

总结:

  1. 适用于需要根据某值(比如主键bookId)查询其他相关类中的数据时使用,比如BookInfo
  2. 如果直接使用Book就可以封装好BookDto,就可以不这么做,直接使用foreach或者在stream流中直接使用Book对象就行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值