List转set_JAVA数组转set内容不一致

List转set_JAVA数组转set内容不一致list集合和set集合的相互转化

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

该段可忽略———————-


最近做的一个项目中,用到了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());
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184114.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java calendar和date_java calendar获取年月日

    java calendar和date_java calendar获取年月日java中的Calendar类为什么起个名字就叫做日历呢?因为这个类可以让我们像看日历一样得到这个时间的所有属性,你还在为不知道2014年5月7日是周几而苦恼吗?你还在为2005年8月14日是8月的第几周而发愁吗?快来试一试Calendar吧。Calendar的常用属性属性作用YEAR年份MONTH月份DATE同DAY_OF_MONTH,日期DAY_…

    2022年9月23日
  • C#编程,SQLServer提示将截断字符串或二进制数据「建议收藏」

    C#编程,SQLServer提示将截断字符串或二进制数据「建议收藏」如果你的数据类型是varchar,每一个字母占用1个字节,汉字两个字节,放在末尾的空格会自动Trim掉,如果你用nvarchar,且长度是20,当你的数据长度不足20的时候,会自动用空格填充,汉字和字母都占用一个字节。错误:将截断字符串或二进制数据。语句已终止。一般是要保存的数据长度,大于数据库字段设置的长度,连接上数据库,手动调整字段的长度信息。…

    2022年10月7日
  • excel如何合并相同项单元格内容_不能对合并单元格部分更改

    excel如何合并相同项单元格内容_不能对合并单元格部分更改工作中可能想要快速的实现将Excel相同项目单元格合并,下面就跟大家简单地介绍一下。1.如下图F列中含有很多相同项,现在我们想要将这些相同项目单元格合并。2.首选我们选中F列数据单元格区域3.点击下图选项(Excel工具箱,百度即可了解详细下载安装信息,本文这里就不做详细解说。)4.然后选择【合并转换】,【合并相同单元格】5.勾选【列方向】6.最后点击【确定】即可完成7完成效果如下图所示

    2022年11月3日
  • Windows server 80端口被占用怎么办_sqlserver基本介绍

    Windows server 80端口被占用怎么办_sqlserver基本介绍安装sqlserver导致80端口被占用解决方法系统占用的端口一般都是微软官方的产品占用的。所以这个时候主要考虑到几个服务:SQLServer导致。其中很有可能是SQLServerReportingServices(MSSQLSERVER),它是SQLServer的日志系统。IIS服务。如果你电脑安装了这个,很有可能它在运行着,那么它就占用着80端口当然如果都不…

    2022年10月29日
  • Delphi2007 下安装ActiveX控件[通俗易懂]

    Delphi2007 下安装ActiveX控件[通俗易懂]此英文文章来自codegear官方网站,但是是讲在BDS2006 下如何安装,我在delphi2007下用此方法,一样通过,原文如下 Description:HowtoimportanActiveXcontrolinBDS2006?Answer/Solution:Herestheprocedureforimportingandinstalling

    2022年5月14日
  • Java LDAP统一身份认证

    不多说直接看代码,如下:importjava.util.Hashtable;importjavax.naming.AuthenticationException;importjavax.naming.Context;importjavax.naming.NamingEnumeration;importjavax.naming.NamingException;import…

    2022年4月6日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号