Внешний итератор против внутреннего итератора

Что такое внешний и внутренний итераторы 9X_jdk в Java?

39
0
5
Общее количество ответов: 5

Ответ #1

Ответ на вопрос: Внешний итератор против внутреннего итератора

Внешний итератор

Когда вы берете итератор и переступаете 9X_jre через него, это внешний итератор

for (Iterator iter = var.iterator(); iter.hasNext(); ) {
  Object obj = iter.next();
  // Operate on obj
}

Внутренний итератор

Когда вы 9X_iterator передаете объект функции методу для выполнения 9X_core-java по списку, это внутренний итератор

var.each( new Functor() {
  public void operate(Object arg) {
    arg *= 2;
  }
});
30
4

  • @ denis631 Да, я согласен, что цикл foreach действует аналогично внутреннему итератору. Я не использовал его в качестве примера, так как я понимаю, ...

Ответ #2

Ответ на вопрос: Внешний итератор против внутреннего итератора

Я нашел это description:

Внешние и внутренние итераторы.

Внешние 9X_java-se итераторы - когда итерация контролируется 9X_oraclejdk объектом коллекции, мы говорим, что у нас 9X_java есть внешний итератор.

В таких языках, как 9X_core-java .net или java, очень легко создавать внешние 9X_listiterator итераторы. В нашей классической реализации 9X_j2se реализован внешний итератор. В следующем 9X_iterator примере используется внешний итератор:

// using iterators for a clloection of String objects:
// using in a for loop
for (Iterator it = options.iterator(); it.hasNext(); ) {
   String name = (String)it.next();
   System.out.println(name);
}

// using in while loop
Iterator name = options.iterator();
    while (name.hasNext() ){
      System.out.println(name.next() );
    }

// using in a for-each loop (syntax available from java 1.5 and above)
    for (Object item : options)
        System.out.println(((String)item));

Внутренние 9X_jre итераторы - когда итератор управляет им, у 9X_j2se нас есть внутренний итератор

С другой стороны, реализация 9X_java и использование внутренних итераторов действительно 9X_iterators сложно. Когда используется внутренний итератор, это 9X_iterator означает, что запускаемый код делегируется 9X_java-se агрегатному объекту. Например, в языках, которые 9X_oraclejdk предлагают поддержку для этого, легко вызвать 9X_.java внутренние итераторы:

collection do: [:each | each doSomething] (Smalltalk)  

Основная идея - передать 9X_openjdk код для выполнения в коллекцию. Затем коллекция 9X_jre вызовет внутренний метод doSomething для 9X_openjdk каждого из компонентов. В C++ можно отправить 9X_listiterator метод doMethod как указатель. В C#, .NET 9X_javax или VB.NET можно отправить метод как делегат. В 9X_iterators java необходимо использовать шаблон проектирования 9X_java-api Functor. Основная идея - создать базовый интерфейс 9X_java-api только с одним методом (doSomething). Затем 9X_iterators метод будет реализован в классе, реализующем 9X_.java интерфейс, и этот класс будет передан в 9X_openjdk коллекцию для выполнения итерации. Дополнительные 9X_j2se сведения см. В шаблоне проектирования Functor.

11
0

Ответ #3

Ответ на вопрос: Внешний итератор против внутреннего итератора

Пример внешнего итератора:

int count = 0;
Iterator iterator = allTheStaffs.iterator();
while(iterator.hasNext()) {
    SomeStaff staff = iterator.next();
    if(staff.getSalary() > 25) {
        count++;
    }
}

Пример внутреннего 9X_iterator итератора:

long count = allTheStaffs.stream()
                         .filter(staff -> staff.getSalary() > 25)
                         .count();

В изображениях:

9X_Внешний итератор против внутреннего итератора_javax

8
0

Ответ #4

Ответ на вопрос: Внешний итератор против внутреннего итератора

Речь идет о who controls the iteration

Другие подробности в этом вопросе 9X_java What are the benefits of the Iterator interface in Java?

2
1

  • @srk: 13 лет спустя, спасибо ...

Ответ #5

Ответ на вопрос: Внешний итератор против внутреннего итератора

Я нашел ответ на here.

Внутренние итераторы управляют 9X_iterator итерациями в фоновом режиме. Это оставляет 9X_.java программисту просто декларативно кодировать 9X_listiterator то, что должно быть сделано с элементами 9X_java-libraries коллекции, вместо того, чтобы управлять 9X_core-java итерацией и следить за тем, чтобы все элементы 9X_java обрабатывались один за другим. Пример:

public class InternalIterator {

   public static void main(String args[]){

      List namesList=Arrays.asList("Tom", "Dick", "Harry");

      namesList.forEach(name -> System.out.println(name));//Internal Iteration

   }

}

С 9X_listiterator внешними итераторами ответственность за 9X_j2se повторение элементов и обеспечение того, чтобы 9X_jre эта итерация учитывала общее количество 9X_j2se записей, наличие дополнительных записей 9X_java-libraries для повторения и т. д., лежит на программисте.

Пример:

import java.util.*;

public class ExternalIterator {

   public static void main(String args[]){
      List namesList=Arrays.asList("Tom", "Dick", "Harry");
      for(String name:namesList){
         System.out.println(name);
      }

   }

}

1
0