For-Each 循环中的限制

Man*_*lis 3 java foreach loops

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

我使用 XTF 图像,它的工作原理类似于 TIFF。这个图像存储了大约 20000 行称为 pings 的几个信息:坐标、开始时间、停止时间......我在 Intellij 上使用的处理方法变得太重,但效果很好。我想将存储在我的 XTF 图像中的信息切成两个:一张图像带有 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();
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 5

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

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

另一种方法(如果getPings()返回支持随机访问的集合(例如列表)或数组)是将增强的 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
    }
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 5

I know this doesn't fit exactly the OP's situation, but maybe this will help someone else looking to implement an iterate limit using Java 8:

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

for (Object obj : first10000) {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

or more simply:

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