使用Java 8安全地从集合中删除项目

达巴达巴

我试图使用来迭代一个集合,forEach但是意识到调用remove(Object o)该集合是不安全的,并且可能会导致ConcurrentModificationException这是我正在尝试做的事情:

public void removeMatchup(Set<Player> players) {
        predefinedMatchups.stream().filter(m -> m.getPlayers().equals(players)).forEach(m -> predefinedMatchups.remove(m));
}

因此,我将其更改为:

public void removeMatchup(Set<Player> players) {
    Iterator<Matchup> iterator = predefinedMatchups.iterator();
    while (iterator.hasNext())
        if (iterator.next().getPlayers().equals(players))
            iterator.remove();
}

我真的很喜欢流的简洁性,这就是为什么我要重新设计整个项目以包含Java 8的新功能。

有没有解决此问题的方法,我可以在执行安全删除时使用流?

普什莫

既然SetCollection这样,我们就可以使用removeIf(Predicate<? super E> filter)方法(例如,默认情况下,一个内部使用方法Iterator及其remove方法,就像您在第二个示例中一样)。

409  默认 布尔值removeIf(谓词<?super E>过滤器){ 
410 对象。requireNonNull(过滤器);
411 布尔值已移除=;
412 最终的 迭代器<E> each = iterator();
413 (每个。hasNext()){
414 如果(过滤器。试验(每。下一个())){
415 的每个。删除();
416 移除= true
417 }
418 }
419 返回已删除;
420 }

因此您的代码如下所示:

public void removeMatchup(Set<Player> players) {
    predefinedMatchups.removeIf(m -> m.getPlayers().equals(players));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java中安全地在不可变类中使用集合?

来自分类Dev

如何使用终端安全地远程删除Debian中的USB硬盘

来自分类Dev

使用Live Ubuntu USB有意安全地删除EFI分区中的Ubuntu目录

来自分类Dev

用Java线程安全地创建和删除文件

来自分类Dev

如果文件中的项目数量非常少,是否可以安全地使用Spring Batch多线程步骤?

来自分类Dev

如何在Java中安全地访问数组线程?

来自分类Dev

安全地使用WeakReference

来自分类Dev

在Angular中通过$ scope安全地使用eval()

来自分类Dev

如何安全地使用C中的枚举?

来自分类Dev

如何在 CircleCI 中安全地使用 Gemfury 令牌?

来自分类Dev

在git commit消息中可以安全地使用任何utf-8字符吗?

来自分类Dev

如何安全地从for循环中的数组中删除项目?

来自分类Dev

如何使用TPL管道安全地从多个线程访问集合

来自分类Dev

确定生产站点上是否正在使用mysql索引,因此可以安全地将其删除

来自分类Dev

Akka角色和Java8 CompletableFuture可以安全地组合吗?

来自分类Dev

在其他驱动器上使用Win 10时,可以安全地从驱动器中删除Win 7吗?

来自分类Dev

使用JavaScript安全地发布消息

来自分类Dev

使用“从Purrr安全地”调试功能?

来自分类Dev

通过SSH安全地使用VNC

来自分类Dev

使用JavaScript安全地发布消息

来自分类Dev

何时可以安全地使用 `isalpha()`

来自分类常见问题

Java 8 Streams可以对集合中的项目进行操作,然后将其删除吗?

来自分类Dev

使用“ Where”方法中的变量安全地使用Rails 4

来自分类Dev

如何在Java桌面应用程序中安全地实现SQL查询

来自分类Dev

C:使用对数函数可以安全地计算底数(b)的整数(N)中的位数

来自分类Dev

我可以在多线程C ++中安全地使用int吗?

来自分类Dev

使用PHP安全地加密MySQL数据库中静止的客户详细信息

来自分类Dev

可以安全地使用jwt解码来解码React js中的令牌吗?

来自分类Dev

如何在bash中明确安全地强制使用内置命令

Related 相关文章

  1. 1

    如何在Java中安全地在不可变类中使用集合?

  2. 2

    如何使用终端安全地远程删除Debian中的USB硬盘

  3. 3

    使用Live Ubuntu USB有意安全地删除EFI分区中的Ubuntu目录

  4. 4

    用Java线程安全地创建和删除文件

  5. 5

    如果文件中的项目数量非常少,是否可以安全地使用Spring Batch多线程步骤?

  6. 6

    如何在Java中安全地访问数组线程?

  7. 7

    安全地使用WeakReference

  8. 8

    在Angular中通过$ scope安全地使用eval()

  9. 9

    如何安全地使用C中的枚举?

  10. 10

    如何在 CircleCI 中安全地使用 Gemfury 令牌?

  11. 11

    在git commit消息中可以安全地使用任何utf-8字符吗?

  12. 12

    如何安全地从for循环中的数组中删除项目?

  13. 13

    如何使用TPL管道安全地从多个线程访问集合

  14. 14

    确定生产站点上是否正在使用mysql索引,因此可以安全地将其删除

  15. 15

    Akka角色和Java8 CompletableFuture可以安全地组合吗?

  16. 16

    在其他驱动器上使用Win 10时,可以安全地从驱动器中删除Win 7吗?

  17. 17

    使用JavaScript安全地发布消息

  18. 18

    使用“从Purrr安全地”调试功能?

  19. 19

    通过SSH安全地使用VNC

  20. 20

    使用JavaScript安全地发布消息

  21. 21

    何时可以安全地使用 `isalpha()`

  22. 22

    Java 8 Streams可以对集合中的项目进行操作,然后将其删除吗?

  23. 23

    使用“ Where”方法中的变量安全地使用Rails 4

  24. 24

    如何在Java桌面应用程序中安全地实现SQL查询

  25. 25

    C:使用对数函数可以安全地计算底数(b)的整数(N)中的位数

  26. 26

    我可以在多线程C ++中安全地使用int吗?

  27. 27

    使用PHP安全地加密MySQL数据库中静止的客户详细信息

  28. 28

    可以安全地使用jwt解码来解码React js中的令牌吗?

  29. 29

    如何在bash中明确安全地强制使用内置命令

热门标签

归档