Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >set.remove()方法不会从Set中删除对象

set.remove()方法不会从Set中删除对象
EN

Stack Overflow用户
提问于 2021-09-29 01:31:41
回答 1查看 72关注 0票数 0

我认为在尝试从forEach()循环中的集合中删除一个对象时,我犯了一个小错误。remove()不移除对象,有人能指出问题的所在吗?谢谢!

代码语言:javascript
运行
AI代码解释
复制
Set<RoleExtEntity> roleExtEntitySet = roleEntity.getExt(); //set size = 3
Map<String, RoleExtEntity> roleExtEntityMap = 
        new HashMap<>(roleExtEntitySet.size());

roleExtEntitySet.stream().forEach(roleExtEntity -> {
      if (role.getName() == null && roleExtEntity.getKey().equals("name")) {
            //this line doesn't work; set size should be 2 but it's still 3
            roleExtEntitySet.remove(roleExtEntity);
      } else {
            roleExtEntityMap.put(roleExtEntity.getKey(), roleExtEntity);
      }
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-29 01:38:17

任何人都能指出问题的所在

在没有看到代码的情况下,我猜想这是因为您没有正确地覆盖equals和/或hashCode,而且/或您已经修改了roleExtEntity,因为它被放入到映射中,从而影响了hashCode

不管怎么说,如果这个remove确实工作了,您就会冒出一个ConcurrentModificationException的风险,因为您正在从正在迭代的集合中移除。

相反,您可以使用显式Iterator来实现这一点,它允许您使用remove()

代码语言:javascript
运行
AI代码解释
复制
for (Iterator<RoleExtEntity> it = roleExtEntitySet.iterator(); it.hasNext();) {
  RoleExtEntity roleExtEntity = it.next();
  if (...) {
    it.remove();
  } else {
    // ...
  }
}

另一种选择可以是将forEach分解为执行移除操作和执行放置操作的操作:

代码语言:javascript
运行
AI代码解释
复制
if (role.getName() == null) { // Since role appears to be unchanged in the loop
  roleExtEntitySet.removeIf(roleExtEntity -> roleExtEntity.getKey().equals("name"));
}

Map<String, RoleExtEntity> roleExtEntityMap =
    roleExtEntitySet.stream().collect(
        Collectors.toMap(RoleExtEntity::getKey, r -> r));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69373781

复制
相关文章
AngularJS Scope(作用域)
Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带。
陈不成i
2021/07/23
1.5K0
【AngularJS】—— 12 独立作用域
前面通过视频学习了解了指令的概念,这里学习一下指令中的作用域的相关内容。 通过独立作用域的不同绑定,可以实现更具适应性的自定义标签。借由不同的绑定规则绑定属性,从而定义出符合更多应用场景的标签。 本篇将会总结下面的内容:   1 为何需要独立作用域   2 如何实现独立作用域   3 作用域的数据绑定 之前有一些错误,是由于replace拼写错误导致的。 拼写正确后,网友发现报错,无法正常工作。这是因为模板中存在单标签<br>,导致模板无法正确解析~ 再次感谢博友们提出的错误! 独立作
用户1154259
2018/01/17
1.4K0
【AngularJS】—— 12 独立作用域
AngularJs之Scope作用域
  AngularJS 中,作用域是一个指向应用模型的对象,它是表达式的执行环境。作用域有层次结构,这个层次和相应的 DOM 几乎是一样的。作用域能监控表达式和传递事件。
用户5640963
2019/07/26
1.6K0
angularjs中设置select的选中项
最近用angularjs比较多,里面有很多自己的方法,都不咋会用,这篇只是个笔记,防止自己忘记
庞小明
2019/07/08
3.2K0
在shell脚本中添加暂停,按任意键继续
分析一个复杂脚本的时候,有时候需要加点暂停,分段来看,比较清晰 于是参考了一些实现,目前自己用的是这样子的 #add for debug by zqb function get_char() {   SAVEDSTTY=`stty -g`   stty -echo   stty cbreak   dd if=/dev/tty bs=1 count=1 2> /dev/null   stty -raw   stty echo   stty $SAVEDSTTY } enable_pause=1 funct
zqb_all
2019/12/27
6.9K0
关于JS中的作用域中的沉思
scope和closure是javascript中两个非常关键的概念,前者JS用多了还比较好理解而且容易体会到,而closure就不一样了。这玩意是真的很容易迷糊
Yerik
2021/08/07
8850
Linux 内核中 Kconfig 文件的作用和添加 menuconfig 项的方法
嵌入式开发中,需要定制或添加一些内核的功能。这里就需要配置 Kconfig 文件了。本文简单说明一下如何修改。便于需要时查找
amc
2018/07/02
3.6K0
R分词继续,\"不|知道|你在|说|什么\"分词添加新词
* 中文分词常用实现: 单机:R语言+Rwordseg分词包 (建议数据量<1G) 分布式:Hadoop+Smallseg库 词库:Sougou词库,Sougou输入法官网可下载 这里只先介绍单机的实现: 1、R语言:专门用于统计分析、绘图的语言 2、Rwordseg分词包:引用了@ansj开发的ansj中文分词工具,基于中科院的ictclas中文分词算法,无论是准确度还是运行效率都超过了rmmseg4j。 * 环境准备 (Windows或Linux版本都行): R下载:http://mirrors.us
学到老
2018/03/19
1.1K0
R分词继续,\"不|知道|你在|说|什么\"分词添加新词
R分词继续,\"不|知道|你在|说|什么\"分词添加新词
单机:R语言+Rwordseg分词包 (建议数据量<1G) 分布式:Hadoop+Smallseg库 词库:Sougou词库,Sougou输入法官网可下载 这里只先介绍单机的实现: 1、R语言:专门用于统计分析、绘图的语言 2、Rwordseg分词包:引用了@ansj开发的ansj中文分词工具,基于中科院的ictclas中文分词算法,无论是准确度还是运行效率都超过了rmmseg4j。
学到老
2019/02/28
7850
angularJS学习之路(四)---作用域(1)
这里提到的“作用域”的概念,是一个在范围上与 DOM 结构一致,数据上相对于某个 $scope 对象的属性的概念。我们还是从 HTML 代码上来入手:
wust小吴
2019/07/08
3150
将 Fedora Linux 系统添加到企业域中
在企业互联网场景中,一般情况下最广泛使用的基于 Linux 的操作系统是 Red Hat Enterprise Linux(RHEL),它主要用于服务器,但也可以用作工作站。Fedora linux 其实也是工作站系统的一个很好的选择,它提供了许多在企业环境中工作的特性,使管理成为一项简单的任务。
用户1880875
2021/09/06
1.6K0
angularjs 控制器、作用域、广播详解
一、控制器 首先列出几种我们平常使用控制器时的几种误区: 我们知道angualrJs中一个控制器时可以对应不同的视图模板的,但这种实现方式存在的问题是: 如果视图1和视图2根本没有任何逻辑关系,这样“
柴小智
2018/04/10
1.9K0
angularjs 控制器、作用域、广播详解
AngularJS系列(二)——作用域和控制器
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
逝兮诚
2019/10/30
4450
在 Grub 菜单下添加Clover的启动项进入黑苹果
2、编辑grub的配置文件,以ubuntu举例,编辑 /etc/grub.d/40_custom文件,添加以下内容:
前Thoughtworks-杨焱
2021/12/07
2K0
【AngularJS】 # AngularJS入门
ng-app 指令定义一个 AngularJS 应用程序。 若不声明,将直接显示表达式。
全栈程序员站长
2022/09/15
23.3K0
【AngularJS】 # AngularJS入门
Nat. Mach. Intel. | GPU计算和深度学习在药物发现领域中的变革作用
今天带来的是 Abraham C. Stern 和Artem Cherkasov联合课题组的Mohit Pandey发表在《nature machine intelligence》的评论文章《GPU计算和深度学习在药物发现领域中的变革作用》。
DrugAI
2022/06/10
8680
Nat. Mach. Intel. | GPU计算和深度学习在药物发现领域中的变革作用
angularjs学习第九天笔记(指令作用域【隔离作用域】研究)
您好,昨天学习了指令作用域为布尔型的情况, 今天主要研究其指针作用域为{}的情况 1、当作用域scope为{}时,子作用域完全创建一个独立的作用域,   此时,子做预约和外部作用域完全不数据交互   但是,在实际应用中,子做作用域也还是要和外部数据交互。        为止,引入了数据绑定概念 2、隔离作用域数据绑定有三种方式:  其一、“@”     格式为:       scope{         属性名称:"@"       }     子外作用域数据交互表现: 隔离的子作用域和外部作用域实现单
小小许
2018/08/31
5410
angularjs学习第九天笔记(指令作用域【隔离作用域】研究)
angularjs学习第九天笔记(指令作用域【隔离作用域】研究)
您好,昨天学习了指令作用域为布尔型的情况, 今天主要研究其指针作用域为{}的情况 1、当作用域scope为{}时,子作用域完全创建一个独立的作用域,   此时,子做预约和外部作用域完全不数据交互   但是,在实际应用中,子做作用域也还是要和外部数据交互。        为止,引入了数据绑定概念 2、隔离作用域数据绑定有三种方式:  其一、“@”     格式为:       scope{         属性名称:"@"       }     子外作用域数据交互表现: 隔离的子作用域和外部作用域实现单
小小许
2018/09/20
4070
Angularjs基础(一)
(一) 模型——视图——控制器     端对端的解决方案,AngularJS 试图成为WEB 应用中的一种段对端的解决方案。AngylarJS 的出众       之处如下:数据绑定,基本模板标识符,表单验证,路由,深度连接,组件重用,依赖注入。测试包括       单元测试,段对端测试,模拟和自动化测试框架。 Hello World     <Doctype html>     <html ng-app>       <head lang="en">         <m
用户1197315
2018/01/19
3.1K0
BCDboot_bcdedit添加启动项
BCDboot 是一种用于快速设置系统分区(或修复系统分区)上的启动环境的工具。
全栈程序员站长
2022/11/01
1.2K0

相似问题

在作用域中过滤AngularJS

12

如何从AngularJS作用域中的数组中删除项?

764

从作用域中删除项时使用AngularJS的ngAnimate

11

AngularJS:=&@在指令作用域中的区别?

229

在Angularjs作用域中获取Json数据

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文