遇到问题

在做卡牌游戏开发过程中,回合结束时,场上随从会依次发动【回合结束时】能力。
但是有的能力可以破坏场上其他随从

就造成了一个经典问题:在循环一个List的时候,如果希望移除某元素要怎么办?

查找资料

网上找到了很多方案

  1. 最简单的removeIf
  2. 最麻烦的迭代器Iterable
  3. 最in的stream().spliterator().tryAdvance()方法

但是我试了试,前两种都是只能删除“当前循环的对象”,而第三种连删除当前对象都做不到

其实这个现象想一想还是很合理的:循环途中,是没法控制非当前迭代对象的。

那么该怎么办

而这个需求其实根本上不是以代码上循环场上随从来解决的。
就是说不是循环当前的场上随从,而是循环回合结束瞬间场上随从的快照
我们再看看需求:
场上随从会依次发动【回合结束时】能力
看到后我的直接理解是:

list = 场上随从
list.forEach(iter ->iter.回合结束时)

但是其实应该这么理解:

list = new ArrayList<>(场上随从)
list.forEach(iter ->{if(iter在场) iter.回合结束时
})

也就是说,这个迭代不要依赖java里面的任何关键字或者方法。先实例化一个新的list,再靠while循环自己弄。

结论

想在循环list的时候remove任何一个元素,就不要操作原数组。
最重要的是在目标list上实例化一个新list,再对这个新list进行循环。

对于需求的理解上,需求中的一个数据,如果不是很有经验的产品,要的是数据在某个时间的快照往往是程序员需要追问出来的信息。

(回合结束瞬间在场上的)随从会依次(如果在场上则)发动【回合结束时】能力。

我犯了一个非常基础的错误:在对List的循环中改变了List相关推荐

  1. [转移]犯了一个很傻的错误

    [转移]犯了一个很傻的错误 转移自自己原来在YourBlog上的Blog,写于2004-3-7 20:58:54 一个很简单的ADO.Net页面,怎么都无法浏览,总是提示sa用户登陆错误,但是在IDE ...

  2. 犯了一个连接数据库的低级错误

    <%   set adocon=server.createobject("adodb.recordset")   adocon.Open"Driver={SQL S ...

  3. 我犯了一个错误,您能指出吗?

    这是我最近在项目中犯的一个错误,您能指出吗? 这个项目在数据访问方面使用了传统的Repository模式.为此,我定义了一个Repository基类,可以让每个不同的Repository继承它: pu ...

  4. 我犯了一个低级的C++的逻辑错误

    自己犯了一个低级错误.留作警示. #include <iostream> #include <fstream> #include <vector> #include ...

  5. 使用css选择器容易犯的一个小错误

    使用css选择器容易犯的一个小错误 比如说,当我们使用scrapy框架的时候,想要利用find_element_by_css_selector()方法来找出网页中对应的部分,比如说下图所示的登陆框. ...

  6. 多数公司容易犯的5个大数据错误

    多数公司容易犯的5个大数据错误 如今,大数据革命驱动了现代工业发展,每天都有越来越多的企业采用大数据技术.然而,尽管大量数据已经存在和应用了很长时间,但如何使用它,仍然存在许多严重的错误. 以下是企业 ...

  7. 自学python需要下载什么软件-一个零基础学习Python应该知道的学习步骤与规划

    原标题:一个零基础学习Python应该知道的学习步骤与规划 很多初学Python的同学都面临着很多的疑问,在之前的文章中我大致的很多问题我已经进行了讲解,无论你是编程零基础.数学,英语不错.还是说没有 ...

  8. 程序员常犯的五个非技术性错误

    一个好的程序员需要培养两种技能:技术技能和非技术技能.然而有些开发者只注重技术的部分,而忽视了其他部分. 下面是程序员最常犯的 5 个非技术性错误: 缺乏自律 Jim Rohn 曾经说过:自律是目标和 ...

  9. java犯的小错误_[Java教程]十个JavaScript中易犯的小错误,你中了几枪?

    [Java教程]十个JavaScript中易犯的小错误,你中了几枪? 0 2015-06-01 12:00:19 序言 在今天,JavaScript已经成为了网页编辑的核心.尤其是过去的几年,互联网见 ...

最新文章

  1. 一个小小的AI训练营竟然卧虎藏龙
  2. ActiveMQ学习(七)
  3. android listview添加数据_Android面经分享,失业两个月,五一节前拿到offer
  4. 4、Cocos2dx 3.0三,找一个小游戏开发Hello World 分析
  5. .NET的托管堆中是否可能出现内存泄漏现象
  6. cat(MATLAB
  7. phpize的作用(资料整理)
  8. Tomcat 7 的七大新特性
  9. editplus配置刷新
  10. sysbench线程数_分享3个Sysbench性能压测脚本及多并发压测过程
  11. java生成离散型随机数_几种随机数生成方式
  12. 关于如何提取仙剑奇侠传4的模型
  13. 扬州鉴真国际半程马拉松
  14. gmail不支持html格式,gmail邮箱附件如何以html格式查看
  15. Python A value is trying to be set on a copy of a slice from a DataFrame
  16. Mac如何清理应用软件
  17. 什么是负载均衡器 负载均衡器的功能
  18. Vue+OpenLayers学习系列(九)Vue+OpenLayers小案例(长度测量、面积测量、坐标定位、坐标获取)
  19. 计时器计算小时、分钟、秒数
  20. Qt绘制星空图及卫星视图坐标

热门文章

  1. 超实用的 Vue 组件通信方式大汇总(8种)
  2. 15款android设备上的代码编辑器,超级方便!
  3. Spring @Resource详解
  4. 使用redis incr处理并发,存在死锁问题
  5. PINTOS——Project 1: Threads
  6. linux怎么查看是不是centos版本
  7. linux服务器盘符乱了怎么办,部分国产服务器重启会盘符会乱的问题
  8. 互联网日报 | 腾讯地图上线聚合打车服务;瑞幸咖啡等公司被罚6100万元;中通快递下周二香港上市...
  9. vue项目,h5图片放大后,支持手指缩放功能
  10. php 调用java接口