作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是家庭作业的一部分,无法正常工作。我被赋予了此类对象来使用:
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/
我是一名优秀的程序员,十分优秀!