一、Stream流
1.1、概述
Stream流是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列,集合讲的是数据,流讲的是计算!
1.2、特点
(1)Stream 自己不会存储元素;
(2)Stream 不会改变源对象。相反,它会返回一个持有结果的新Stream。
(3)Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。
1.3、阶段
(1)创建一个Stream:一个数据源(数组、集合);
(2)中间操作:一个中间操作,处理数据源数据;
(3)终止操作:一个终止操作,执行中间操作链,产生结果;
源头===>中间流水线===>结果
1.4、案例
/**
* Stream对日期进行降序排序,日期如果为null,排在第一位
* 参考:https://blog.csdn.net/weixin_49114503/article/details/123273054
*/
@Test
public void test1() {
List<UserDO> beforeUserDOS = new ArrayList<>();
UserDO u1 = new UserDO(1L,"张三", LocalDate.of(2000,2,5));
UserDO u2 = new UserDO(2L,"李四",LocalDate.of(2000,3,8));
UserDO u3 = new UserDO(3L,"王五",LocalDate.of(2001,1,2));
UserDO u4 = new UserDO(4L,"赵六");
UserDO u5 = new UserDO(5L,"赵六",LocalDate.of(2008,1,1));
beforeUserDOS.addAll(Arrays.asList(u1,u2,u3,u4,u5));
System.out.println("排序前:" + JSON.toJSONString(beforeUserDOS));
List<UserDO> afterUserDOS = beforeUserDOS.stream().sorted(
Comparator.comparing(UserDO::getBirthday,Comparator.nullsFirst(Comparator.naturalOrder())).reversed()).collect(Collectors.toList()
);
System.out.println("排序后:" + JSON.toJSONString(afterUserDOS));
}