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

Что такое внешний и внутренний итераторы 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