gpt4 book ai didi

java - 循环遍历ArrayList,检查条件,删除一项或多项

转载 作者:行者123 更新时间:2023-12-01 09:29:58 25 4
gpt4 key购买 nike

这是家庭作业的一部分,无法正常工作。我被赋予了此类对象来使用:

private static class Segment {
int start, end;

Segment(int start, int end) {
this.start = start;
this.end = end;
}
}

因此,如您所见,片段有开始和结束。将其视为一段时间。我想循环遍历段的 ArrayList,如果整数落在该段内(包括该段),则该段将从列表中删除。这是我的循环:

for (int i=0; i < segmentList.size(); ++i) {
if (segmentList.get(i).start <= minEnd && minEnd <= segmentList.get(i).end) {
segmentList.remove(segmentList.get(i));
}
}

我遇到的问题是它没有删除所有段。采取这些片段:

4,7
1,3
2,5
5,6

另一种方法查看段的末端并选择最小的。它正确地计算出 minEnd 是 3,它删除了 1,3 段,但留下了 2,5。正确的输出应该是在第一遍中删除 1,3 和 2,5。那么下一次的 minEnd 将为 6。提前感谢您提供的任何帮助。

最佳答案

正如评论中已经给出的,在使用索引迭代时,删除元素会缩小列表,因此您将无法获得所需的结果。

您可以使用迭代器从列表中删除元素

    Iterator<Segment> it = segmentList.iterator();
while (it.hasNext()) {
Segment seg = it.next();
if (seg.start <= minEnd && minEnd <= seg.end) {
it.remove();
}
}

输出

[Segment:: start 4 end 7, Segment:: start 5 end 6]

Java-8 流

    List<Segment> segments = segmentList.stream().filter(seg -> seg.start <= minEnd && minEnd <= seg.end).collect(Collectors.toList());

输出

[Segment:: start 4 end 7, Segment:: start 5 end 6]

关于java - 循环遍历ArrayList,检查条件,删除一项或多项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39522875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com