1、精通lambda表达式-java8从外部迭代到内部迭代

                                     java8- 从外部迭代到内部迭代

        首先,看一段简单的代码。

//定义一个集合
List<Integer> points = Arrays.asList(1,2);

     传统方式,  java 5之前:

for (int j = 0; j < points.size(); j++) {
	System.out.println(points.get(j));
 } 
Iterator<Integer> iterator = points.iterator();
   while(iterator.hasNext()) {
   System.out.println("java 5之前:" + iterator.next());
}

         java 5之后:

for (Integer point : points) {
	System.out.println("for each:" + point);
}

在java 8之前,一直就是用的是上述几种方式。它们的共性是,按照先后顺序返回集合中的元素。当然,在CPU单核时代这样是合情合理的。然而,随着硬件的发展,双核、四核、八核等,趋势很明显,不适应这种模式就会在不远的将来败下阵来,java程序永远只能绑定到单核上。所以,就需要一种新的访问模式,使之能够将多个任务分发到多个核上并发执行,从而利用多核的处理能力。

从以上的迭代示例可以分析得到,代码一次只能根据外部迭代器制定的顺序访问一个列表元素。

A(迭代器)---> B(元素集合){
  //执行逻辑...
}

Eg:"快递公司,A(领导或者工作制度)要求B(快递员)重复如下操作:如果还有快递,那么按照收件人姓氏的字母表顺序取出下一个,然后通知收件人来取件"。

分析:有一种感觉,A的要求太啰嗦了。其实,对快递员来说,顺序并不重要,不管用什么方式,无论顺序执行,还是并行,只要把所有快递送完就行。

     所以,对于来说,到底怎么做,取决于B自己。而不是像外部迭代那样指定我怎么做。

    那么代码该怎么改了?

    集合只需要提供一个方法来接受“做什么”。所以, java8版本中 ,提供了方法void: forEach();

    借助于此方法,上边的代码可以改为 list.forEach(........);

   

points.forEach(p ->System.out.print("java8 迭代:"+p));

至此,外部迭代转换为内部迭代了,并且由集合forEach的方法来管理。Collection.forEacj()方法实际上是由Collection从Iterator继承的。内部迭代的好处是,代码精简、乱序执行等

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值