专业网站设计定制,网络组建拓扑图,网站搜不出来怎么办,网站免费打包2019独角兽企业重金招聘Python工程师标准 集合类的批处理#xff1a; Java8除了Lambda表达式外还提供了另一个重要的特性#xff0c;即集合的批处理操作#xff0c;集合类的批处理操作API的目的是实现集合类的“内部迭代”#xff0c;并期望充分利用现代多核… 2019独角兽企业重金招聘Python工程师标准 集合类的批处理 Java8除了Lambda表达式外还提供了另一个重要的特性即集合的批处理操作集合类的批处理操作API的目的是实现集合类的“内部迭代”并期望充分利用现代多核CPU进行并行计算。Java8之前集合类的迭代Iteration都是外部的即客户代码。而内部迭代意味着改由Java类库来进行迭代而不是客户代码。 例如Java8以前版本要遍历一个集合通常是 for(Object o: list) {System.out.println(o);
} 而在Java8中可以配合Lambda表达式 list.forEach(o - System.out.println(o)); 集合类中都有forEach方法方法的参数是一个函数接口Consumer这个函数式接口有一个accept()方法用来接受单个参数在forEach方法实现中accept()接受的参数即为每次遍历集合得到的元素。forEach方法相对于以前的for循环来说也只是用了Lambda使代码更简洁了但他却是也是串行的操作每个元素相对于for循环性能上并没有提升而之前所说的并行执行是由于集合中引入的Stream。 在Java的文档中给出的Stream定义是 A sequence of elements supporting sequential and parallel aggregate operations. 意思是Stream是一个支持顺序以及并发的集合处理操作的元素序列 Stream接口在java.util.stream包下主要的实现有IntStream、LongStream、DoubleStream等Stream对象的创建主要有两种方式 通过Collection接口的默认方法stream()创建通过Stream接口的静态工厂方法of()创建 而Stream接口提供的方法也大致分为了两类 一类对原Stream元素进行筛选、变换、做处理等操作最终返回一个处理后的新的Stream对象可以链式调用用多个方法共同处理一类是在得到处理后的新Stream后用来获取想要的非Stream类型结果如集合、Stream元素中的最大值、过滤后剩余的元素个数等Stream部分我发现一个写的很详细的博客想要深入学习可以参考 http://ifeve.com/stream/ 双冒号的使用 Java8中新加了 ::这种操作符用来传递方法或者构造方法的引用这个特性主要是用来简化Lambda表达式如上面forEach方法的例子可以简化为 list.forEach(System.out::println) 要使用这种方法简化Lambda也是有一些限制的首先Lambda表达式代码块中的代码必须是直接调用了另外的一个方法并且方法的参数个数、顺序以及类型都必须和对应接口中的抽象方法一致。同样需要得到构造方法的引用只需要String::new这样在类后面::new即可 转载于:https://my.oschina.net/u/1413049/blog/423921