1.Optional类是Java8为了解决null值判断问题

2.Stream 是Java SE 8类库中新增的关键抽象,Java 8 引入的的Stream主要用于取代部分Collection的操作,

每个流代表一个值序列,流提供一系列常用的聚集操作,可以便捷的在它上面进行各种运算

1.stram()方法:将集合装为流
2.collect()方法:将流转为集合
3.filter()方法:将转为流的集合过滤出满足要求的流
4.map()方法:将每个元素映射成新元素
5.limit(n):获取n个元素
6.skip(n):跳过n元素
7.skip和limit组合实现分页(对数据库的压力没有减轻,只是看着分页了)
8.distinct:去除重复元素

//五个user对象
User user1 = new User(1, "张三", 10);
User user2 = new User(2, "李四", 15);
User user3 = new User(3, "王五", 20);
User user4 = new User(4, "赵六", 25);
User user5 = new User(5, "严七", 30);//将User对象存入list
List<User> userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
userList.add(user5);System.out.println(userList);
//[User{id=1, username='张三', age=10}, User{id=2, username='李四', age=15}, User{id=3, username='王五', age=20}, User{id=4, username='赵六', age=25}, User{id=5, username='严七', age=30}]//1.stram()方法:将集合装为流
Stream<User> stream = userList.stream();
System.out.println(stream);//打印对象地址。java.util.stream.ReferencePipeline$Head@65f651eb//2.collect()方法:将流转为集合
List<User> users = userList.stream().collect(Collectors.toList());
System.out.println(users);[User{id=1, username='张三', age=10}, User{id=2, username='李四', age=15}, User{id=3, username='王五', age=20}, User{id=4, username='赵六', age=25}, User{id=5, username='严七', age=30}]//3.filter()方法:将转为流的集合过滤出满足要求的流
List<User> userList1 = userList.stream().//将集合转为流
filter(user -> user.getAge() > 20).//过滤出年龄大于20的user。(类似于sql中的where user.age > 20)
collect(Collectors.toList());//将流转回集合(便于打印观察结果)
System.out.println(userList1);//[User{id=4, username='赵六', age=25}, User{id=5, username='严七', age=30}]//4.map()方法:将每个元素映射成新元素
List<User> userList2 = userList.stream().filter(user -> user.getAge() > 20).
//过滤出年龄大于20的usermap(user -> {//将过滤得到的user对象的年龄设置为50
user.setAge(50);//执行你想要的操作,每个元素会映射产生新元素,所以map()方法要有返回值
return user;//返回新元素}).
collect(Collectors.toList());//将流转为集合System.out.println(userList2);//[User{id=4, username='赵六', age=50}, User{id=5, username='严七', age=50}]//5.limit(n):获取n个元素
List<User> userList3 = userList.stream().limit(3).collect(Collectors.toList());//获取前三个元素。类似于mysql数据库中的  'limit 参数一,参数二' 关键字的参数二
System.out.println(userList3);//[User{id=1, username='张三', age=10}, User{id=2, username='李四', age=15}, User{id=3, username='王五', age=20}]//6.  skip(n):跳过n元素
List<User> userList4 = userList.stream().skip(2).collect(Collectors.toList());//跳过两个元素,类似于mysql数据库中  'limit 参数一,参数二' 关键字的参数一
System.out.println(userList4);//[User{id=3, username='王五', age=20}, User{id=4, username='赵六', age=50}, User{id=5, username='严七', age=50}]//7.skip和limit组合实现分页
List<User> userList5 = userList.stream().skip(2).limit(2).collect(Collectors.toList());//获取第二页数据(每页显示两条数据)
System.out.println(userList5);//[User{id=3, username='王五', age=20}, User{id=4, username='赵六', age=50}]//8.  distinct:去除重复元素
//向集合中插入一个重复元素
userList.add(user5);
System.out.println(userList);//[User{id=1, username='张三', age=10}, User{id=2, username='李四', age=15}, User{id=3, username='王五', age=20}, User{id=4, username='赵六', age=50}, User{id=5, username='严七', age=50}, User{id=5, username='严七', age=30}]List<User> userList6 = userList.stream().distinct().collect(Collectors.toList());//去重(实体类中需要实现equals()和hashCode())
System.out.println(userList6);//[User{id=1, username='张三', age=10}, User{id=2, username='李四', age=15}, User{id=3, username='王五', age=20}, User{id=4, username='赵六', age=50}, User{id=5, username='严七', age=50}]

3.LocalDate、LocalTime、LocalDateTime区别

LocalDate:年月日

LocalTime:时分秒

LocalDateTime:年月日时分秒

4.实际工作中用法

//判断startTime不为null时把startTime值赋给TserviceStartDate,
Optional.ofNullable(startTime).ifPresent(serviceTimeRecordEntity::setTserviceStartDate);

//获取开始时间最小值

Optional<LocalDate> startTime = items.stream().map(VehicleItemDTO.ServiceItem::getBeginTime).min(LocalDate::compareTo)

5.参考资料

https://blog.csdn.net/kk514020/article/details/103511507

https://blog.csdn.net/qq_35970057/article/details/109050817

https://blog.csdn.net/gejiangbo222/article/details/106123636?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_v2~rank_aggregation-6-106123636.pc_agg_rank_aggregation&utm_term=ifpresent%E7%94%A8%E6%B3%95&spm=1000.2123.3001.4430

https://blog.csdn.net/weiqiang915/article/details/107209981

JAVA8新特性Optional和Stream和Localdate用法相关推荐

  1. Java8新特性 Lambda、Stream、Optional实现原理

    Java8新特性 Lambda.Stream.Optional实现原理 一.接口中默认方法修饰为普通方法 二.Lambda表达式 2.1.什么是Lambda表达式 2.2.为什么要使用Lambda表达 ...

  2. JAVA8 新特性-Lamda跟Stream

    JAVA8 新特性-Lamda跟Stream 主要内容 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 其他新特性 Jav ...

  3. Java8新特性总结 -5.Stream API函数式操作流元素集合

    所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/T ...

  4. 零基础学习java------21---------动态代理,java8新特性(lambda, stream,DateApi)

    1. 动态代理 在一个方法前后加内容,最简单直观的方法就是直接在代码上加内容(如数据库中的事务),但这样写不够灵活,并且代码可维护性差,所以就需要引入动态代理 1.1 静态代理实现 在讲动态代理之前, ...

  5. java8新特性Lambda和Stream以及函数式接口等新特性介绍

    主要内容 1.Lambda 表达式 2.函数式接口 3.方法引用与构造器引用 4.Stream API 5.接口中的默认方法与静态方法 6.新时间日期API 7.其他新特性 Java 8新特性简介 速 ...

  6. Java8新特性 Optional类

    作为开发人员每天与NullPointerException斗智斗勇.每接收到参数或调用方法获得值得判断一下是否为null.稍不留意,空指针异常就像幽灵一样出现了.这篇文章我们来学习Java8是如何通过 ...

  7. Java8新特性——Optional 类

    文章目录 前言 Optional 类 1.概述 2.API介绍 of ofNullable empty isPresent get ifPresent orElse orElseGet orElseT ...

  8. Java8新特性-Optional

    文章目录 简介 Optional源码分析和使用场景 属性和构造 常用方法 get()方法 isPresent()方法 ifPresent(Consumer<? super T> consu ...

  9. Java8新特性Optional类

    这里写自定义目录标题 Java8 Optional 类 前言 创建 Optional 实例 Optional API常用接口的用法 get()方法 isPresent()方法 isPresent()方 ...

最新文章

  1. HDU - 7028 Decomposition 无向完全图构造欧拉回路
  2. JSP动态网站环境搭建应用中的详细步骤(Tomcat和Apache/IIS的整合)
  3. matlab的v带优化设计,基于遗传算法及MATLAB的V带传动优化设计
  4. Linux上将二进制文件转化为c语言数组
  5. android 控件xpath软件_请像用户使用软件一样,享受自动化测试~
  6. multisim 仿真
  7. 大学电路题目怎么搜_大学扫一扫题目出答案软件,可以拍照搜大学题目的app,大学电路分析搜题软件...
  8. MATLAB 绘制柱状图
  9. 解决“npm不是内部或外部命令“
  10. Js解决微信浏览器刷新的问题
  11. Verilog语法【参数化设计(parameter 和defparam)】
  12. pycocotools安装,简单易懂
  13. 一个非教条式的TDD例子
  14. NPDP产品经理证书在中国有用吗?
  15. C# 开发CAD注意事项(二)-CAD不显示注记
  16. 网易互动直播2.0 开发 十八 双屏逻辑
  17. 银河麒麟桌面操作系统 V10 SP1下Qt应用程序开发环境配置
  18. 聊聊深度学习这档子事(1):待定系数法
  19. python+selenium实现自动登录phpwind论坛自动随机发帖
  20. 报考中级会计职称必须取得初级职称吗,中级会计难考吗?

热门文章

  1. Mongodb系列- java客户端简单使用(CRUD)
  2. android应用版本更新功能---完整版
  3. Mac OS X 程序员利器 – Homebrew安装与使用
  4. VMWare 8 安装 Mac OS 10.7 (Lion)版 【转】
  5. Speed Up YUM!
  6. 项目Wiki的选择和配置
  7. 【CSS布局】已知布局元素的高度,写出三栏布局,要求左栏、右栏宽度各为300px,中间自适应。
  8. WIN10+VS2015环境下安装PCL1.8.1
  9. php清空dns缓存文件,怎么清除DNS缓存
  10. 7-93 链表去重 (25 分)