Optional接口简记
2024-10-07 06:14:09
@Data
public class Employee {
private String name;
}
@Data
public class Company {
private String name;
private List<Employee> employees;
}
/**
* optional接口, optional的使用都是基于函数式的用法, 不写if-else判断
* optional 无法序列化, 不要将她作为方法参数 或 类的成员变量, 只用在方法的返回值上,
* 用来规避空指针异常
*/
public class OptionalTest {
@Test
public void test() {
Optional<String> optional = Optional.of("hello");
// 无用的使用方式
if (optional.isPresent()) {
System.out.println(optional.get());
}
// 推荐的使用方式
optional.ifPresent(item -> System.out.println(item));
}
@Test
public void test2() {
Optional<String> optional = Optional.empty();
// 推荐的使用方式, 没有值将不执行传入的方法
optional.ifPresent(item -> System.out.println(item));
System.out.println("---------------------------------");
System.out.println(optional.orElse("world"));
System.out.println("---------------------------------");
System.out.println(optional.orElseGet(() -> "nihao"));
System.out.println("---------------------------------");
}
@Test
public void Test3() {
Employee employee = new Employee();
employee.setName("zhangsan");
Employee employee2 = new Employee();
employee2.setName("lisi");
Company company = new Company();
company.setName("company");
List<Employee> employees = Arrays.asList(employee, employee2);
company.setEmployees(employees);
List<Employee> list = company.getEmployees();
// 传统手工艺做法:
/*
if (null != list) {
return list;
} else {
return new ArrayList<Employee>();
}
*/
// 崭新的函数式风格
Optional<Company> optional = Optional.ofNullable(company);
System.out.println(
optional.map(c -> c.getEmployees()).orElse(Collections.emptyList())
);
}
}
最新文章
- dubox首次调用消费者执行两次问题
- java-final关键字
- CentOS中的常用命令
- ORM框架Entity Framework
- php Calender(日历)代码
- 简单的信誉算法 js处理
- java基础加强
- MyDatePicker拆分日期显示到不同TextBox
- JAVA 23种开发模式详解(代码举例)
- BZOJ第7页养成计划
- 键盘keyCode值
- 排序算法--冒泡排序(Bubble Sort)_C#程序实现
- 3.Solr4.10.3目录结构
- 【Spring环境搭建】在Myeclipse下搭建Spring环境-web开发
- ARM 中必须明白的几个概念
- guava学习:guava集合类型-table
- High School: Become Human(数学思维)
- react路由配置(未完)
- 【Python3 爬虫】07_正则表达式(原子)
- HihoCoder1653 : 公平分队([Offer收割]编程练习赛39)(贪心)
热门文章
- codevs 1255 搭积木 x
- 官方转译:截止2018-12-10,chromedriver与chrome对应关系表
- (转载)FM 算法
- PHP通用后台管理系统发布!
- 【机器学习速成宝典】模型篇05朴素贝叶斯【Naive Bayes】(Python版)
- leetcode 239. 滑动窗口最大值(python)
- JS数组方法的的返回值和是否改变该数组总结
- 【1】mongoDB 的安装及启动
- 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_04.mybatis概述
- 测开之路一百四十八:WTForms表单验证