深圳Java培训
达内深圳宝安中心

136-3244-2201

热门课程

达内JAVA学堂——内部迭代

  • 时间:2015-12-08
  • 发布:深圳Java培训
  • 来源:达内新闻

达内JAVA学堂——内部迭代

在考虑将迭代的顺序模型应用到真实世界的场景中时就会发现其侵入性变得非常明显。如果有人通过如下指令让你邮寄一些信件--"重复如下动作:如果还有信件,那么按照收件人姓氏的字母表顺序取出下一个,然后将其放到邮箱中",那么你可能会觉得他这么说太啰嗦了。深圳JAVA培训知道在这个任务中顺序并不重要,无论是顺序执行还是并行执行都可以,只不过不要遗漏信件即可。这时,你会觉得在存在更好策略的情况下,外部迭代导致集合只能连续并且按照固定顺序处理元素的做法实在是太低效了。

实际上,对于这个现实任务来说,深圳JAVA培训告诉你只需要知道每封信件都要邮寄出去即可;到底该怎么做取决于你自己。同样,我们应该告诉集合应该对它们所包含的每一个元素采取什么动作,而不是像外部迭代那样指定怎么做。如果能够做到这一点,那么代码会变成什么样子呢?集合只需要公开一个方法来接受"做什么",也就是说对每一个元素要执行什么任务;这个方法的一个显而易见的名字就是forEach。借助于它,我们可以像下面这样替换掉本节一开始的迭代代码:

pointList.forEach(/*translate the point by (1,1)*/);

达内JAVA学堂——内部迭代

在Java 8之前,这个建议看起来会很奇怪,因为java.util.List (pointList的类型)并没有forEach方法,作为一个接口,我们也无法向其添加方法。不过,第7章将会看到Java 8通过引入非抽象接口方法解决了这一问题。

新方法Collection.forEach(实际上是由Collection从其父接口Iterable继承的)只不过是内部迭代的一个示例,之所以这么说是因为,虽然已经看不到显式的迭代代码,但迭代依旧在内部发生。迭代现在由forEach方法管理,它会对集合中的每个元素应用其行为参数。

从外部迭代到内部迭代的变化看起来很小,只不过是迭代工作跨越了客户端-库的边界。不过,其结果却并不是那么简单。我们所需要的并行工作现在可以定义在集合类中,不必重复写在每一个要迭代集合的客户端方法中。此外,实现上可以自由使用其他技术,比如说延迟加载、乱序执行或是其他方法,从而更快地获得结果。

如果编程模型允许集合库的作者针对每个集合自由选择最佳的批处理实现方式,那么内部迭代就很有必要了。不过要想替换forEach调用中的注释,那么该如何告诉集合方法应对每个元素执行什么任务呢?达内JAVA学堂将在以后为你解析。

上一篇:企业需要什么?JAVA复合型人才!
下一篇:恭喜学员周娜娜入职济南有鸿通信

预计发布的Java 9中,很令人期待的是什么?

【深圳JAVA培训】世界十类很急需IT人才

JAVA——很吃香的编程语言

为什么程序员是很有钱的一批人?

选择城市和中心
贵州省

广西省

海南省