39

Java の外部イテレータと内部イテレータとは何ですか?

4

6 に答える 6

29

外部反復子

イテレータを取得してそれをステップオーバーすると、それは外部イテレータです

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

内部反復子

関数オブジェクトをメソッドに渡してリストを実行する場合、それは内部反復子です

var.each( new Functor() {
  public void operate(Object arg) {
    arg *= 2;
  }
});
于 2008-10-22T06:32:24.927 に答える
11

この説明を見つけました:

外部イテレータと内部イテレータ。

外部反復子 - 反復がコレクション オブジェクトによって制御される場合、外部反復子があると言います。

.net や Java などの言語では、外部反復子を作成するのは非常に簡単です。私たちの古典的な実装では、外部反復子が実装されています。次の例では、外部反復子が使用されています。

// 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));

内部イテレータ - イテレータがそれを制御する場合、内部イテレータがあります

一方、内部反復子の実装と使用は非常に困難です。内部反復子が使用されている場合、実行されるコードが集約オブジェクトに委譲されていることを意味します。たとえば、これをサポートする言語では、内部イテレータを簡単に呼び出すことができます。

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

主なアイデアは、実行するコードをコレクションに渡すことです。次に、コレクションは各コンポーネントの doSomething メソッドを内部的に呼び出します。C++ では、doMethod メソッドをポインターとして送信できます。C#、.NET、または VB.NET では、メソッドをデリゲートとして送信できます。Java では、Functorデザイン パターンを使用する必要があります。主なアイデアは、1 つのメソッド (doSomething) のみで基本インターフェイスを作成することです。次に、インターフェイスを実装するクラスにメソッドが実装され、そのクラスがコレクションに渡されて反復されます。詳細については、Functorデザイン パターンを参照してください。

于 2008-10-22T06:27:22.453 に答える
8

外部イテレータの例:

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

内部反復子の例:

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

画像:

ここに画像の説明を入力

于 2018-10-25T11:17:12.797 に答える
2

誰が反復を制御するかについてです

その他の詳細はこの質問にあります Java の Iterator インターフェイスの利点は何ですか?

于 2008-10-22T06:25:35.470 に答える