Java 8 有没有类似 Python enumerate 的内置函数?

11 投票
5 回答
4495 浏览
提问于 2025-04-18 07:20

三年前这里有个类似的问题:

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) 索引获取操作的列表时,效率相当高,而且可以很干净地进行并行处理。所以我觉得这个方法没有什么问题。

撰写回答