如何在java中迭代集合的同时修改集合中的对象

kam*_*uri 2 java arraylist hashset

我有这样的场景:
有一个大约500MB的巨大文本文件,我必须使其reports.Each行的内容有一些值由space.out几个值分隔,其中两个是URL和RESPONSETIME.如果网址的响应时间超过8000毫秒,我必须报告该网址被击中的总次数,以及响应时间大于8000毫秒的次数,因此最终报告将看起来像这样

URL total hits delayed response
url1     100     5 
url2     1000    18
Run Code Online (Sandbox Code Playgroud)

我已经在google上完成了我的部分搜索,所以不要建议我这样做.使用列表不是解决方案,因为在迭代列表的对象时无法修改列表的对象.
任何人请提出想法.

Jon*_*eet 8

使用列表不是解决方案,因为在迭代列表的对象时无法修改列表的对象.

是的你可以.您无法更改列表本身(添加项目,删除项目或替换项目),但您可以修改列表引用的对象.例如:

List<StringBuilder> builders = new List<StringBuilder>();
builders.add(new StringBuilder());

for (StringBuilder builder : builders) {
    builder.append("This changes the builder but not the reference in the list");
}
Run Code Online (Sandbox Code Playgroud)

但是,您根本不需要将所有行加载到列表中并不完全清楚.这无法帮助您通过URL进行聚合,这听起来就像您真正需要做的那样.

感觉你应该有一个Map<URL, HitData>.然后逐行读取文件,并且每次遇到必须报告的行时,都会尝试在地图中获取相应的条目.如果没有,请创建一个新的.如果有,或者修改它,或者(如果您喜欢不可变类型)创建一个新条目并替换旧条目.