首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >外部迭代器与内部迭代器

外部迭代器与内部迭代器
EN

Stack Overflow用户
提问于 2008-10-22 06:21:18
回答 6查看 19.7K关注 0票数 39

Java中的外部和内部迭代器是什么?

EN

回答 6

Stack Overflow用户

发布于 2008-10-22 06:32:25

外部迭代器

当您获得一个迭代器并遍历它时,这就是一个外部迭代器

代码语言:javascript
运行
复制
for (Iterator iter = var.iterator(); iter.hasNext(); ) {
  Object obj = iter.next();
  // Operate on obj
}

内部迭代器

将函数对象传递给方法以遍历列表时,这是一个内部迭代器

代码语言:javascript
运行
复制
var.each( new Functor() {
  public void operate(Object arg) {
    arg *= 2;
  }
});
票数 29
EN

Stack Overflow用户

发布于 2008-10-22 06:27:22

我找到了这个description

外部迭代器与内部迭代器。

外部迭代器-当迭代由集合对象控制时,我们说我们有一个外部迭代器。

在像.net或java这样的语言中,创建外部迭代器是非常容易的。在我们的经典实现中,实现了一个外部迭代器。在下面的示例中,使用了外部迭代器:

代码语言:javascript
运行
复制
// 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));

内部迭代器-当迭代器控制它时,我们就有了一个内部迭代器

另一方面,实现和使用内部迭代器是非常困难的。当使用内部迭代器时,这意味着正在运行的代码被委托给聚合对象。例如,在支持这一点的语言中,很容易调用内部迭代器:

代码语言:javascript
运行
复制
collection do: [:each | each doSomething] (Smalltalk)  

其主要思想是将要执行的代码传递给集合。然后,集合将在内部调用每个组件上的doSomething方法。在C++中,可以将doMethod方法作为指针发送。在C#、.NET或VB.NET中,可以将方法作为委托发送。在java中,必须使用Functor设计模式。主要思想是创建一个只有一个方法(doSomething)的基接口。然后,该方法将在实现该接口的类中实现,并将该类传递给集合进行迭代。有关更多详细信息,请参阅Functor设计模式。

票数 11
EN

Stack Overflow用户

发布于 2018-10-25 19:17:13

外部迭代器示例:

代码语言:javascript
运行
复制
int count = 0;
Iterator<SomeStaff> iterator = allTheStaffs.iterator();
while(iterator.hasNext()) {
    SomeStaff staff = iterator.next();
    if(staff.getSalary() > 25) {
        count++;
    }
}

内部迭代器示例:

代码语言:javascript
运行
复制
long count = allTheStaffs.stream()
                         .filter(staff -> staff.getSalary() > 25)
                         .count();

在图像中:

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/224648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档