赞
踩
Stream
流式操作Stream
流式操作,就是学习java.util.stream
包下的API
,Stream
不同于java
的输入输出流,是实现对集合(Collection)
的复杂操作,例如查找、替换、过滤和映射数据等,集合是一种静态的数据结构,存储在内存中,而Stream
是用于计算的,通过CPU
实现计算,因此可以认为Stream
就是处理集合数据的各种算法流程。
Stream
流式操作流程Stream流式操作主要有 3 个步骤:
1、创建Stream对象
:通过一些数据源创建流对象
2、中间操作
:对数据源的数据进行处理(过滤、排序等)
3、终止操作
:一旦执行终止操作, 就执行中间的链式操作,并产生结果
Stream
的获取1.针对集合:Collection中的方法
Stream<E> stream()
2.针对数组:Stream接口中的静态方法:
static <T> Stream<T> of(T... values)
Stream
的操作// 由数字组成的集合
List<Integer> numberList = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5);
// Student类:自增的主键id,name由uuid生成,且首位是数字
List<Student> selectList = studentMapper.selectList(new LambdaQueryWrapper<>());
Stream
的中间操作// filter:过滤
// 截取首位数字,输出取余为0的对象
List<Student> list1 = selectList.stream().filter(student -> {
int i = Integer.parseInt(student.getName().substring(0, 1));
return 0 == (i % 2);
}).collect(Collectors.toList());
// map:将流中的每个元素映射为另一个元素,生成一个新的流
// 输出每个Student
List<Integer> list2 = selectList.stream().map(student -> student.getName().length()).collect(Collectors.toList());
// sorted:对流中的元素进行排序,默认是自然顺序排序,也可以传入Comparator进行自定义排序
// 集合中是一个对象
// 根据id正序
List<Student> list3 = selectList.stream().sorted(Comparator.comparing(Student::getId)).collect(Collectors.toList());
// 根据id倒叙
List<Student> list4 = selectList.stream().sorted(Comparator.comparing(Student::getId).reversed()).collect(Collectors.toList());
// 集合中是数字
List<Integer> list5 = numberList.stream().sorted((o1, o2) -> {
if (o1.compareTo(o2) > 0) {
return -1;
} else {
return 1;
}
}).collect(Collectors.toList());
// distinct:去重
List<Integer> list6 = numberList.stream().distinct().collect(Collectors.toList());
// limit:截取前几个元素
List<Integer> list7 = numberList.stream().limit(3).collect(Collectors.toList());
// skip:越过前几个元素
List<Integer> list8 = numberList.stream().skip(3).collect(Collectors.toList());
Stream
的终止操作// forEach:遍历操作,没有返回值,在accept方法中编写集合处理逻辑即可
selectList.forEach(new Consumer<Student>() {
@Override
public void accept(Student student) {
System.err.println(student.getId()+" -- "+student.getName())
}
});
// 可简化为
selectList.forEach(student -> System.err.println(student.getId()+" -- "+student.getName()));
// collect:将流中的元素收集到一个集合中。可以通过Collectors工具类提供的方法来实现不同类型的收集操作。
// 例如:从查询到的所有学生中,过滤id>10的,然后将过滤出来的所有学生放进一个新的集合中
List<Student> studentList = selectList.stream().filter(student -> student.getId() > 10).collect(Collectors.toList());
// reduce:对流中的元素求和
int sum = numberList.stream().reduce(0, Integer::sum);
// count:统计个数
long count = numberList.stream().count();
// anyMatch:判断流中是否存在任意一个元素满足给定条件。
boolean anyMatch = numberList.stream().anyMatch(integer -> integer % 2 == 0);
// anyMatch:判断流中的所有元素是否都满足给定条件。
boolean allMatch = numberList.stream().allMatch(integer -> integer % 2 == 0);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。