Java 8 有没有类似 Python enumerate 的内置函数?
三年前这里有个类似的问题:
Java有没有类似Python的'enumerate'函数?
我很喜欢listIterator()
这个解决方案。不过,现在我经常使用新引入的流和lambda(在JDK 8中推出),我在想:有没有更优雅的方法来获取当前处理元素的索引?我下面展示的方式,但我觉得不是特别好看。
IntStream.range(0, myList.size())
.mapToObj(i -> doSthWith(myList.get(i), i));
5 个回答
18
这个问题之前已经被问过几次了。关键在于,除非你对大小和分割信息有完美的了解(基本上,如果你的数据源是一个数组),否则这将只能是一个顺序操作。
你提到的那个“看起来不太吸引人的”答案:
IntStream.range(0, myList.size())
.mapToObj(i -> doSthWith(myList.get(i), i));
实际上在 myList
是一个 ArrayList
或其他具有快速 O(1) 索引获取操作的列表时,效率相当高,而且可以很干净地进行并行处理。所以我觉得这个方法没有什么问题。