在Python语言中,enumerate
函数允许您遍历一系列(索引、值)对。例如:
>>> numbers = ["zero", "one", "two"]
>>> for i, s in enumerate(numbers):
... print i, s
...
0 zero
1 one
2 two
在Java中有什么办法做到这一点吗?
发布于 2011-08-24 04:41:27
对于实现List
接口的集合,可以调用listIterator()
方法来获取ListIterator
。迭代器有两个方法-- nextIndex()
,获取索引;next()
,获取值(和其他迭代器一样)。
因此,上面的Python的Java等效项可能是:
import java.util.ListIterator;
import java.util.List;
List<String> numbers = Arrays.asList("zero", "one", "two");
ListIterator<String> it = numbers.listIterator();
while (it.hasNext()) {
System.out.println(it.nextIndex() + " " + it.next());
}
它和Python一样,输出如下:
0 zero
1 one
2 two
发布于 2013-01-25 21:30:19
根据Python文档(here),这是您能获得的最接近Java的代码,并且不再冗长:
String[] numbers = {"zero", "one", "two"}
for (int i = 0; i < numbers.length; i++) // Note that length is a property of an array, not a function (hence the lack of () )
System.out.println(i + " " + numbers[i]);
}
如果您需要使用List
类...
List<String> numbers = Arrays.asList("zero", "one", "two");
for (int i = 0; i < numbers.size(); i++) {
System.out.println(i + " " + numbers.get(i));
}
*注意:如果在遍历列表时需要修改列表,则需要使用迭代器对象,因为它可以在不引发ConcurrentModificationException
的情况下修改列表。
发布于 2017-10-13 09:55:52
简单明了
public static <T> void enumerate(Iterable<T> iterable, java.util.function.ObjIntConsumer<T> consumer) {
int i = 0;
for(T object : iterable) {
consumer.accept(object, i);
i++;
}
}
示例用法:
void testEnumerate() {
List<String> strings = Arrays.asList("foo", "bar", "baz");
enumerate(strings, (str, i) -> {
System.out.println(String.format("Index:%d String:%s", i, str));
});
}
https://stackoverflow.com/questions/7167253
复制相似问题