限制For-Each循环

时间:2015-05-13 13:28:18

标签: java loops foreach

我是Java初学者和地理信息学专业的学生。

我使用的是XTF图像,它的工作方式与TIFF相同。这个图像存储了大约20000行称为ping有几个信息:坐标,开始时间,停止时间...我在Intellij上使用的治疗变得太重但是效果很好。 我想切入存储在我的XTF图像中的两个信息: 1个图像,10000个第一个ping,另一个具有20000个最后一个ping。后来我会收集这两张照片。 我的问题很简单:如何使用“for each”循环来命令限制(< = 10000)?我将信息存储在csv文件中。

for (XtfPing ping : xtf.getPings())
        {
            writer.write( Double.toString( ping.x) );
            writer.write( "," );
            writer.write( Double.toString( ping.y) );
            writer.write( "\n" );
        }
        writer.close();

3 个答案:

答案 0 :(得分:2)

如果您必须使用增强型for循环,则必须引入自己的计数器以测试迭代次数:

int limit = 0;
for (XtfPing ping : xtf.getPings())
{
    if (limit <= 10000) {
        // do something
    } else {
        // do something else
    }
    limit++;
}

替代方法(如果getPings()返回支持随机访问的Collection(例如List)或数组)将使用传统的for循环替换增强的for循环,其中内置迭代编号。

例如,如果getPings返回List

for (int i = 0; i < xtf.getPings().size(); i++)
{
    XtfPing ping = xtf.getPings().get(i);
    if (i <= 10000) {
        // do something
    } else {
        // do something else
    }
}

答案 1 :(得分:0)

我知道这并不完全符合OP的情况,但这可能会帮助其他希望使用Java 8实现迭代限制的人:

List<Object> myList = ...
List<Object> first10000 = myList.stream().limit(10000).collect(Collectors.toList());

for (Object obj : first10000) {
    // do stuff
}

或更简单:

List<Object> myList = ...
myList.stream().limit(1000).forEach(o -> {
    // do stuff
});

答案 2 :(得分:0)

您可以使用int来增加每个循环,并使用break;来停止for循环

 int i = 0;
 for (XtfPing ping : xtf.getPings()) {
     (if i <= amountOfLoops) {
        writer.write( Double.toString( ping.x) );
        writer.write( "," );
        writer.write( Double.toString( ping.y) );
        writer.write( "\n" );
     } else {break;}
 }
 writer.close();