当前位置:网站首页>如何优雅的获取每个分组的前几条数据

如何优雅的获取每个分组的前几条数据

2022-07-05 04:06:00 沛沛老爹

背景

最近在改一个功能时,发现有个需要获取每个问题回答的前3条的最优回复内容。

然后组合成list。返回给到前端。

大家可能觉得这个比较简单,找出所有的来,然后一个for循环,解决完事。

但是作为有理想的,装逼的程序员,我们怎么能做这样的操作?

解决方案

一、使用mysql解决

这个方案网上比较常见。

SQL贴上

select media_id from article a
where  3>=(select count(1) from article where `status`=1 and media_id=a.media_id and hot_num > a.hot_num)
 order by a.media_id,id desc;

二、使用stream的groupBy解决

Map<String, List<Article>> map = list.stream()
                .collect(Collectors.groupingBy(Article::getMediaId,
                        Collectors.collectingAndThen(Collectors.toList(),
                                list2 -> list2.stream().sorted(Comparator.comparing(Article::getHdNum, Comparator.reverseOrder())).limit(3).collect(Collectors.toList()))));

 

总结

第二种方式中查询的数据有点大,建议还是用第一种好点。

原网站

版权声明
本文为[沛沛老爹]所创,转载请带上原文链接,感谢
https://lubuxun.blog.csdn.net/article/details/125602870