1.什么是并行流操作?
并行流处理是jdk8提供给我们的一个新功能,本质上是一个ForkJoin框架的实现。简单讲并行流就是使用 parallelStream 方法获取并行流进行业务处理,一个典型的实例是:stream.parallel() .filter(…) .sequential() .map(…) .parallel() .reduce();其中sequential是将一个并行流转换为串行流。并行流线程数默认等于处理器的核数。
2.并行流求平均值
并行流计算平均值效率是比较高的,特别是数据量级比较大的场景下。但是如果数据量小使用stream为宜。
@Data
@ToString
@AllArgsConstructor
public class Student {
private Long id;
private String name;
private Integer sexual;
private Integer status;
private Double mathematics;
private Double chinese;
}
List<Student> students = Arrays.asList(
new Student(1L,"nick1", 0, 1, 91.5, 80.0),
new Student(2L,"nick2", 1, 1, 90.0, 85.0),
new Student(3L,"nick3", 0, 1, 81.0, 82.0),
new Student(4L,"nick4", 1, 0, 0.0, 0.0),
new Student(5L,"nick5", 0, 1, 79.0, 92.0));
Double average = students.parallelStream().filter(e -> e.getStatus() > 0).mapToDouble(Student::getChinese).average().getAsDouble();
3.并行流遍历
并行流遍历实际上是不保证顺序的,如果需要顺序遍历则需要使用forEachOrdered方法。
students.parallelStream().forEachOrdered(e->{
System.out.println(e.getName());
});
4.一些并行流特点
我们有时候会取流中的任何一个元素,之前在串行流中使用的findFirst现在需要使用findAny,这样可以取得更高的效率
Student any = students.parallelStream().filter(e -> e.getChinese() > 90).findAny().get();
来源:oschina
链接:https://my.oschina.net/u/4946901/blog/4921852