该段可忽略----------------------
最近做的一个项目中,用到了list转set的应用,索性就发个帖子记录一下。
简单说一下背景,当时是为了实现查询出来的帖子中显示出当前用户对该帖子是否有点赞和收藏的动作,即前端需要当前用户对该帖子的点赞和收藏状态,来标记点赞、收藏按钮,是否为点亮还是灰色。
因为是批量展示帖子,刚开始的做法是取出查询出来的帖子的ids,去到点赞表里查这些帖子的点赞状态。由于我们有自定义的返回体,所以整个过程比较繁琐。后面就用到了list转set的用法,直接去判断set中存不存在点赞的id,存在为true,不存在为false。
上面一段是自己的记录,可忽略直接看下一段。
list转set(多出的代码段,结合了部分业务内容)
//获取帖子集合
List<Post> postList=postService.pagePost(req);
//获取所有帖子的ids
list<Long> ids=postList.stream().map(x -> x.getId()).collect(Collectors.toList());
//获取所有点赞帖子的ids
List<Long> likeIds = likeService.selectLikesByIds(ids).stream().map(o ->o.getTargetId()).collect(Collectors.toList());
//list转set(重点)
Set<Long> likeSet = new HashSet<>(likeIds);
//将点赞状态set进返回体
postResponse.setLikeStatue(likeSet.contains(postResponse.getId()));
//第二种list转set的方法
Set<Long> likeSet = likeService.selectLikesByIds(ids).stream().map(o ->o.getTargetId()).collect(Collectors.toSet());
set转list
//Set转化成List
//方法一
Set<String> set = new HashSet<String>();
set.add("mmmmmm");
set.add("nnnnnn");
set.add("ssssss");
List<String> list = new ArrayList<String>(set);
//方法二,使用迭代器
Set<String> set = new HashSet<String>();
set.add("aaaaa");
set.add("bbbbb");
set.add("ccccc");
List<String> list = new ArrayList<String>();
Iterator it=set.iterator();
while(it.hasNext())
{
list.add(it.next());
}