并行流与串行流区别
串行流:单线程的方式操作; 数据量比较少的时候。
并行流:多线程方式操作;数据量比较大的时候,原理:
Fork join 将一个大的任务拆分n多个小的子任务并行执行,
最后在统计结果,有可能会非常消耗cpu的资源,确实可以
提高效率。
注意:数据量比较少的情况下,不要使用并行流
对象某字段和
Stream<Student> stream = students.stream();
// Optional<Student> reduce = stream.reduce(new BinaryOperator<Student>() {
// @Override
// public Studentapply(Student student, Student student2) {
// student.setAge(student.getAge() + student2.getAge());
// return student;
// }
// });
Optional<Student> reduce = stream.reduce((user1, user2) -> {
user1.setAge(user1.getAge() + user2.getAge());
return user1;
});
System.out.println(reduce.get());
------------------------------------------
Stream<Integer> integerStream = Stream.of(10, 30, 80, 60, 10, 70);
// Optional<Integer> reduce = integerStream.reduce(new BinaryOperator<Integer>() {
// @Override
// public Integer apply(Integer a1, Integer a2) {
// return a1 + a2;
// }
// });
Optional<Integer> reduce = integerStream.reduce((a1, a2) -> a1 + a2);
System.out.println(reduce.get());
求最大最小值
Optional<Student> max = stream.max((o1, o2) -> o1.getAge() - o2.getAge());
System.out.println(max.get());
Optional<Student> min = stream.min(((o1, o2) -> o1.getAge() - o2.getAge()));
System.out.println(min.get());
//最小值一样
//Optional<Student> max = stream.max(new Comparator<Student>() {
// @Override
// public int compare(Student o1, Student o2) {
// return o1.getAge() - o2.getAge();
// }
// });
// System.out.println(max.get());