使用for(int i = 0; i < str.length; i++)我可以轻松检测循环是否在最后.
但我怎么知道我是否正在使用for或for each.
for(String str : arrayString){
if(End of for) //Do something if the end of the loop
}
Run Code Online (Sandbox Code Playgroud)
我使用的原因for(:),而不是for(;;)是,str实际上是一个大的对象,我需要使用属性,用于循环内的另一个循环.而且我不喜欢使用object.get(index).getProperty它只是为了方便我编写代码.这就是为什么我想知道for(:)循环是否在最后一个索引.
UPDATE
我的临时解决方案是分配一个int包含迭代次数的变量.然后检查变量是否等于的长度str.length.
pic*_*ypg 26
两种简单的方法,考虑到你使用foreach循环的推理,这有点有趣.
int i = 1;
for (String str : arrayString) {
if (i++ == arrayString.length) {
// end
}
}
Run Code Online (Sandbox Code Playgroud)
要么
for (int i = 0; i < arrayString.length; ++i) {
String str = arrayString[i];
if (i + 1 == arrayString.length) {
// end
}
}
Run Code Online (Sandbox Code Playgroud)
实际上是同样的事情.只要注意使用之间的差异i中的if两个循环和起始值之间i.
一种选择是编写自己的迭代器实现,它在每个点暴露第一个,最后一个,索引和值的属性.
我为.NET做了同样的事情,它远非棘手.在Java中,它会更容易,因为您可以使用hasNext()原始迭代器的方法来确定它是否是最后一个元素.该代码看起来东西像这样(没有经过充分测试):
public SmartIterable<T> implements Iterable<SmartIterator<T>.Entry>
{
private final Iterable<T> iterable;
public SmartIterable(Iterable<T> iterable)
{
this.iterable = iterable;
}
public Iterator<T> iterator()
{
return new SmartIterator<T>(iterable.iterator());
}
}
public SmartIterator<T> implements Iterator<SmartIterator<T>.Entry>
{
private final Iterator<T> iterator;
private int index = -1;
SmartIterator(Iterator<T> iterator)
{
this.iterator = iterator;
}
public void remove()
{
// Could potentially just delegate
throw new UnsupportedOperationException();
}
public boolean hasNext()
{
return iterator.hasNext();
}
public Entry next()
{
T nextValue = iterator.next();
index++;
return new Entry(nextValue, index);
}
public class Entry
{
private final int index;
private final T value;
private Entry(int index, T value)
{
this.index = index;
this.value = value;
}
public T getValue()
{
return value;
}
public int getIndex()
{
return index;
}
public boolean isFirst()
{
return index == 0;
}
public boolean isLast()
{
// Call into containing instance
return !hasNext();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35168 次 |
| 最近记录: |