博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java 8 新特性】Java 8 Collection 中的并行流和顺序流
阅读量:3760 次
发布时间:2019-05-22

本文共 2071 字,大约阅读时间需要 6 分钟。

Java 8 Collection 中的并行流和顺序流

Java 8中的Collection已经被流方法丰富了。

这些方法是stream()parallelStream(),它们是默认的方法,已经被写入Collection接口。

因此,它将出现在所有的实现类中。

在这些方法的帮助下,我们可以有效地编写代码。

老式的大量代码可以被写成单行代码。

我们通过例子来看看并行流和顺序流。

并行流(Parallel Stream)

Collection.parallelStream()返回用于调用集合的并行流实例。

流对象可以被用于不同的目的。

在这个例子中,我们采取了一个有工资(salary)字段的员工(employee)列表。

对于一个给定的谓词(Predicate),我们将过滤这个列表,然后计算出平均工资。

请看下面的代码。

ParallelStreamDemo.java

import java.util.ArrayList;import java.util.List;import java.util.OptionalDouble;import java.util.function.Predicate;public class ParallelStreamDemo {
public static void main(String[] args) {
List
list = new ArrayList<>(); list.add(new Employee(1, "A", 2000)); list.add(new Employee(2, "B", 3000)); list.add(new Employee(3, "C", 4000)); list.add(new Employee(4, "D", 5000)); Predicate
seniorEmp = e -> e.sal > 3000 && e.sal < 6000; OptionalDouble averageSal = list.parallelStream().filter(seniorEmp) .mapToDouble(e -> e.sal).average(); System.out.println(averageSal.getAsDouble()); }}

Employee.java

public class Employee {
public int id; public String name; public int sal; public Employee(int id,String name,int sal ){
this.id = id; this.name = name; this.sal = sal; }}

输出将为4500.0

顺序流(Sequential Stream)

Collection.stream() 返回用于调用集合的顺序流实例。

为了理解顺序流,我们尝试计算给定谓词(Predicate)的工资总和。

请看下面的代码。

SequentialStreamDemo.java

import java.util.ArrayList;import java.util.List;import java.util.function.Predicate;public class SequentialStreamDemo {
public static void main(String[] args) {
List
list = new ArrayList<>(); list.add(new Employee(1, "A", 2000)); list.add(new Employee(2, "B", 3000)); list.add(new Employee(3, "C", 4000)); list.add(new Employee(4, "D", 5000)); Predicate
juniorEmp = e -> e.sal > 1000 && e.sal < 4000; int salsum = list.stream().filter(juniorEmp) .mapToInt(e -> e.sal).sum(); System.out.println(salsum); }}

输出将为5000

参考文献

转载地址:http://mogsn.baihongyu.com/

你可能感兴趣的文章
Oracle指令,软件架构,
查看>>
oracle5:oracle的图形界面操作,分页查询,练习
查看>>
密码学基础之对称密码体制和公钥密码体制
查看>>
Spark Streaming进阶
查看>>
C++顺序表经典算法
查看>>
网络安全与管理知识点总结
查看>>
YARN的概述
查看>>
企业级ansible(一)-----ansible的基础知识了解
查看>>
有关IP及IP设定方式 ,改造虚拟机做路由
查看>>
路由器的搭建虚拟机上网及DHCP服务、dns解析
查看>>
linux系统的定时、延迟任务管理
查看>>
linux系统的磁盘管理方式
查看>>
管理lvm(Logical Volume Manager)
查看>>
yum源的配置及第三方软件仓库的管理、yum命令、rpm命令的使用
查看>>
linux系统的selinux管理
查看>>
linux系统的网络桥接配置及链路聚合
查看>>
关于DNS部署
查看>>
类的内存模型(二)
查看>>
生产者消费者模型
查看>>
#剑指offer Day2 一类可以用“框架”快速搞定的二叉树问题
查看>>