在尝试从foreach()
循环中的集合中移除对象时,我想我犯了一个小错误。remove()
没有删除对象,有人能指出问题是什么吗?谢了!
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);
}
});
有人能指出问题是什么吗
如果没有看到您的代码,我想这是因为您没有正确地重写equals
和/或hashcode
,或者您修改了RoleextEntity
,因为它是以影响hashcode
的方式放入映射的。
尽管如此,如果此remove
确实有效,您将冒ConcurrentModificationException
,因为您正在从正在迭代的集合中删除。
for (Iterator<RoleExtEntity> it = roleExtEntitySet.iterator(); it.hasNext();) {
RoleExtEntity roleExtEntity = it.next();
if (...) {
it.remove();
} else {
// ...
}
}
另一种方法是将foreach
拆分为执行移除的部分和执行放入的部分:
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));
我知道有人问过这个问题,但我不能使用它的解决方案来做我想做的事情,我的问题是每次我从函数调用并输入一个Id,它总是告诉我Id被删除,即使我输入了一个从未输入的Id,它仍然打印相同的任何提示和帮助,将不胜感激:)注意:我不想在其中使用ArrayList这里是我的代码:
下面是我的小品课: my ColorEllipse是一个椭圆2D Double,ColorRectangle是一个矩形2D Double。它们都是ColorShape的子类,继承了它的方法。
如何在打字稿中从数组中删除对象? 所以我想从所有对象中删除drug_id。我该如何实现呢?谢谢!
大家早上好。我有以下代码: 问题是,uri变量被分配给RestTemplate构造函数为,也就是说,它从代码变量中删除初始的。
这是我一开始的消息来源。 我的名单 如何在不移除0值的情况下从列表中移除None值?
问题内容: 这是更新mysql SET字段,从字段中删除特定值的最佳方法。 例如。值分别为1,2,3,4,5的字段类别?我想从列表中删除“ 2”: 但是,如果“ 2”是列表中的第一个或最后一个值,该怎么办? 我如何用一个查询处理所有3种情况? 问题答案: 如果您需要从集合中删除的值不能多次出现,则可以使用以下方法: 看到它在这里工作。如果该值可以多次出现,则将删除所有出现的值: