本文共 2071 字,大约阅读时间需要 6 分钟。
Java 8
中的Collection
已经被流方法丰富了。
这些方法是stream()
和parallelStream()
,它们是默认的方法,已经被写入Collection
接口。
因此,它将出现在所有的实现类中。
在这些方法的帮助下,我们可以有效地编写代码。
老式的大量代码可以被写成单行代码。
我们通过例子来看看并行流和顺序流。
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) { Listlist = 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
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) { Listlist = 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/