если я делаю это на Java:
for(String s : myCollection.expensiveListGeneration()) { doSomething(); }
Вызывается ли дорогой ListGeneration () только один раз в начале или на каждой итерации цикла?
Это зависит от реализации?
потому что это эквивалентно использованию итератора, это эквивалентно вызову коллекций '. Метод iterator (), и он вызывается один раз.
Он вызывается один раз и не зависит от реализации. Цикл for-each основан на интерфейсе Iterable. Все, что он делает, это вызывает метод iterator() коллекции один раз в начале, а затем работает с этим итератором.
Iterable
iterator()