💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Java – 内部与外部迭代 > 原文: [https://howtodoinjava.com/java8/java-8-tutorial-internal-vs-external-iteration/](https://howtodoinjava.com/java8/java-8-tutorial-internal-vs-external-iteration/) ## 外部迭代 直到 Java 7 为止,[集合框架](//howtodoinjava.com/java/collections/useful-java-collection-interview-questions/ "Useful java collection interview questions")都依赖于外部迭代的概念,其中集合通过实现`Iterable`提供枚举其元素(即`Iterator`)的方法,并且客户端使用它顺序地遍历了集合。 例如,如果我们想将所有字符串都大写,则可以这样写: ```java public class IterationExamples { public static void main(String[] args){ List<String> alphabets = Arrays.asList(new String[]{"a","b","b","d"}); for(String letter: alphabets){ System.out.println(letter.toUpperCase()); } } } ``` 或者我们可以这样写: ```java public class IterationExamples { public static void main(String[] args){ List<String> alphabets = Arrays.asList(new String[]{"a","b","b","d"}); Iterator<String> iterator = alphabets.listIterator(); while(iterator.hasNext()){ System.out.println(iterator.next().toUpperCase()); } } } ``` 以上两个代码段均用于外部迭代。 外部迭代非常简单,但是存在几个问题: 1)Java 的`for-each`循环/迭代器本质上是顺序的,必须按集合指定的顺序处理元素。 2)它限制了管理控制流的机会,该控制流可能能够通过利用数据的重新排序,并行性,短路或惰性来提供更好的性能。 ## 内部迭代 有时需要`for-each`循环的强力保证(顺序,顺序),但通常只是性能的劣势。 外部迭代的替代方法是内部迭代,客户端让它由库处理而不是控制迭代,而仅提供必须对所有/某些数据元素执行的代码。 上一个示例的内部迭代等效项是: ```java public class IterationExamples { public static void main(String[] args){ List<String> alphabets = Arrays.asList(new String[]{"a","b","b","d"}); alphabets.forEach(l -> l.toUpperCase()); } } ``` 在外部迭代将“做怎么”(大写)和“怎么做”(`for`循环/迭代器)混合使用的情况下,内部迭代使客户端仅提供“做怎么”,而由库控制“怎么做”。 这提供了许多潜在的好处:客户端代码可以更加清晰,因为它只需要关注于陈述问题,而不是解决问题的细节,并且我们可以将复杂的优化代码移到可以使所有用户受益的库中。 这就是关于内部与外部迭代的全部内容。 **祝您学习愉快!**