Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中迭代集合时同时修改集合中的对象_Java_Arraylist_Hashset - Fatal编程技术网

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

如何在java中迭代集合时同时修改集合中的对象,java,arraylist,hashset,Java,Arraylist,Hashset,我有这样一个场景: 有一个大约500MB的巨大文本文件,我必须用它的内容制作报告。每行都有一些由空格分隔的值。out有几个值,其中两个是URL和RESPONSETIME。如果一个url的响应时间超过8000ms,我必须报告该url被命中的总次数,以及其中有多少次响应时间大于8000ms,所以最终报告将如下所示 URL total hits delayed response url1 100 5 url2 1000 18 我已经在谷歌上完成了我的部分搜索,所以不要

我有这样一个场景:
有一个大约500MB的巨大文本文件,我必须用它的内容制作
报告。每行
都有一些由
空格分隔的值。out
有几个值,其中两个是URL和RESPONSETIME。如果一个url的响应时间超过8000ms,我必须报告该url被命中的总次数,以及其中有多少次响应时间大于8000ms,所以最终报告将如下所示

URL total hits delayed response
url1     100     5 
url2     1000    18
我已经在谷歌上完成了我的部分搜索,所以不要这样建议我。使用列表不是一个解决方案,因为在遍历列表时不能修改列表的对象。
任何人请提出意见

使用列表将不是一个解决方案,因为在遍历列表时不能修改列表的对象

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

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");
}
List builders=new List();
添加(新的StringBuilder());
用于(StringBuilder:builder){
append(“这会更改生成器,但不会更改列表中的引用”);
}
但是,还不完全清楚是否真的需要将所有行加载到列表中。这并不能帮助您通过URL进行聚合,这听起来是您真正需要做的


感觉你应该有一张
地图
。然后逐行读取文件,每当遇到需要报告的行时,都会尝试在映射中获取相应的条目。如果没有,创建一个新的。如果有的话,可以就地修改,或者(如果你像我一样喜欢不可变类型)创建一个新条目并替换旧条目。

这个问题与上面提到的问题不同。这个问题是询问如何从列表中删除项目。此问题是关于修改列表中包含的项的问题。Jon Skeet在下面的回答中清楚地说明了这一点。