我是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();
答案 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();