`
一帆风顺
  • 浏览: 3519 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

处理空指针Optional

 
阅读更多

Optional可以看作是一个存放对象的容器

	@Test
	public void createOptional() {
		//empty() 给Optional中放入一个null对象
		Optional<Object> empty = Optional.empty();
		System.out.println(empty);
		System.out.println("====================");
		//of(T value) 创建了一个Optional对象并且包含一个value的对象,如果value为空,报异常。
		Optional<Employee> of = Optional.of(new Employee());
		System.out.println(of);
		//Optional<Employee> of2 = Optional.of(null);
		//System.out.println(of2);
		System.out.println("====================");
		/*
		 * ofNullable(T value)方法,与of()方法不同的是在向Optional对象中存放对象时先进行判断
		 *   如果value不为null的话,创建一个Optional对象并且包含一个value的对象,
	     *   如果value为null,  创建一个Optional.empty()对象
		 */
		Optional<Employee> ofNullable = Optional.ofNullable(new Employee());
		System.out.println(ofNullable);
		Optional<Employee> ofNullable2 = Optional.ofNullable(null);
		System.out.println(ofNullable2);
	}
	输出:
	Optional.empty
	====================
	Optional[Employee [name=null, salary=null, age=null, hireDay=null]]
	====================
	Optional[Employee [name=null, salary=null, age=null, hireDay=null]]
	Optional.empty


	//T get() 取出Optional中的对象,如果Optional中的对象为null,抛出异常
	@Test
	public void getTest() {
		Optional<Employee> of = Optional.of(new Employee());
		System.out.println(of.get());
		//Optional<Object> empty = Optional.empty();
		//System.out.println(empty.get());
	}
	输出:
	Employee [name=null, salary=null, age=null, hireDay=null]


	/*
	*   T orElse(T other) 取出Optional中的对象,设置一个默认对象(默认值),	
	*    如果Optional中的对象为null的时候,就返回默认对象
	*/
	@Test
	public void orElseTest() {
		Optional<Object> empty = Optional.empty();
		System.out.println(empty.orElse(new Employee()));
	}
	输出:
	Employee [name=null, salary=null, age=null, hireDay=null]


	/*
	*  T orElseGet(Supplier<? extends T> other) 与orElse()方法作用相同,
	*  区别在于参数,orElseGet()方法 使用了函数式接口,设置一个默认对象
	*/
	@Test
	public void orElseGetTest() {
		Optional<Object> empty = Optional.empty();
		System.out.println(empty.orElseGet(Employee::new));
	}
	输出:
	Employee [name=null, salary=null, age=null, hireDay=null]


	/*
	*  <X extends Throwable> orElseThrow(Supplier<? extends X> exceptionSupplier)方法
	*  设置一个默认的异常对象, 当取出Optional中的对象时,
	*  如果Optional中的对象为null的时候,抛出指定的默认异常
	*/
	@Test
	public void orElseThrowTest() throws Exception {
		Optional<Object> empty = Optional.empty();
		System.out.println(empty.orElseThrow(Exception::new));
	}
	输出:
	无输出,Optional中是null对象,报Exception异常。


	// boolean isPresent() 判断Optional是否存在对象,如果存在返回true,否则false
	@Test
	public void isPresentTest() {
		Optional<Object> empty = Optional.empty();
		System.out.println(empty.isPresent());
	}
	输出:
	false


	/*
	* void ifPresent(Consumer<? super T> consumer) 判断Optional是否存在对象,
	* 如果存在执行Consumer中的accept()方法
	*/
	@Test
	public void ifPresentTest() {
		Optional<Object> empty = Optional.of(new Employee());
		empty.ifPresent(System.out::println);
	}
	输出:
	Employee [name=null, salary=null, age=null, hireDay=null]
	

	/*
	* Optional<T> filter(Predicate<? super T> predicate) 
	* 把Optional中的对象传入Predicate的方法中,返回值为true,就返回包含该对象的Optional,
	* 如果为false,返回Optional.empty();
	*/
	@Test
	public void filterTest() {
		Optional<Object> optional = Optional.of(new Employee());
		Optional<Object> filter = optional.filter((e)->{
			return e !=null;
		});
		System.out.println(filter);
	}
	输出:
	Optional[Employee [name=null, salary=null, age=null, hireDay=null]]


	/*
	* <U> Optional<U> map(Function<? super T, ? extends U> mapper)
	* 把返回的对象放入Optional中
	*/
	@Test
	public void mapTest() {
		Optional<Employee> optional = Optional.of(new Employee());
		Optional<Employee> map = optional.map((x)->{
			return x;
		});
		System.out.println(map.get());
	}
	输出:
	Employee [name=null, salary=null, age=null, hireDay=null]


	/*
	* <U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)
	* 返回Optional的对象
	*/
	@Test
	public void flatMapTest() {
		Optional<Employee> optional = Optional.of(new Employee());
		Optional<String> flatMap = optional.flatMap((x)->{
			Optional<String> optional2=Optional.of("abc");
			return optional2;
		});
		System.out.println(flatMap);
	}
	输出:
	Optional[abc]

 

分享到:
评论

相关推荐

    autocorr-vi-5.3.6.1-24.el7.noarch.rpm.zip

    文件太大放服务器下载,请务必到电脑端资源详情查看然后下载

    ssm旅游资源网站.zip

    ssm旅游资源网站.zip

    bc-1.06.95-13.el7.x86_64.rpm.zip

    文件放服务器下载,请务必到电脑端资源详情查看然后下载

    clutter-gtk-1.8.4-1.el7.x86_64.rpm.zip

    文件放服务器下载,请务必到电脑端资源详情查看然后下载

    autocorr-sv-5.3.6.1-24.el7.noarch.rpm.zip

    文件太大放服务器下载,请务必到电脑端资源详情查看然后下载

    基于分片技术实现高性能区块链go源码+项目说明(高分毕设).zip

    基于分片技术实现高性能区块链的Go源码和项目说明,是一个专为计算机、数学及电子信息等专业学生设计的毕业设计项目。该项目利用先进的区块链技术和分片机制,旨在解决传统区块链在大规模数据处理中的性能瓶颈问题。本项目通过引入分片技术,将区块链网络划分为多个较小的分片,每个分片独立处理一部分交易和数据。这种架构不仅提高了系统的并行处理能力,还显著提升了整体的交易吞吐量和网络性能。同时,项目还详细阐述了如何实现跨分片的数据同步与一致性保证,确保了系统的安全性和可靠性。此外,项目还包括完整的代码实现和详细的项目说明文档,为学习者提供了从理论到实践的全面指导。无论是区块链技术的初学者还是有一定基础的开发者,都可以通过这个项目深入了解分片技术的实现原理和应用方法。总的来说,这是一个集学习、实践与创新于一体的综合性项目,适合作为相关专业课程设计、期末大作业或毕业设计的优选题目。

    福聚苑社区团购.zip

    福聚苑社区团购.zip

    apr-util-nss-1.5.2-6.el7.x86_64.rpm.zip

    文件太大放服务器下载,请务必到电脑端资源详情查看然后下载

    bzip2-devel-1.0.6-13.el7.i686.rpm.zip

    文件放服务器下载,请务必到电脑端资源详情查看然后下载

    batik-slideshow-1.8-0.12.svn1230816.el7.noarch.rpm.zip

    文件放服务器下载,请务必到电脑端资源详情查看然后下载

    YT118-USB转串口(TYPE-C).zip

    该单片机项目可作为课程设计和期末大作业或者毕设,项目完整,有原理图和代码,需要的自行下载即可!

    babl-devel-0.1.10-10.el7.x86_64.rpm.zip

    文件放服务器下载,请务必到电脑端资源详情查看然后下载

    java小游戏,滚木块.zip学习资源代码

    java java小游戏,滚木块.zip学习资源代码

    agg-devel-2.5-18.el7.i686.rpm.zip

    文件太大放服务器下载,请务必到电脑端资源详情查看然后下载

    cockpit-ws-195.10-1.el7.centos.x86_64.rpm.zip

    文件放服务器下载,请务必到电脑端资源详情查看然后下载

    职能经历丰富度/职业数量/复合职能数据集(2008-2022年).txt

    因文件较多,数据存放网盘,txt文件内包含下载链接及提取码,永久有效。失效会第一时间进行补充。样例数据及详细介绍参见文章:https://blog.csdn.net/T0620514/article/details/144224915

    ca-certificates-2020.2.41-70.0.el7_8.noarch.rpm.zip

    文件放服务器下载,请务必到电脑端资源详情查看然后下载

    bash-doc-4.2.46-34.el7.x86_64.rpm.zip

    文件放服务器下载,请务必到电脑端资源详情查看然后下载

    avahi-gobject-devel-0.6.31-20.el7.x86_64.rpm.zip

    文件太大放服务器下载,请务必到电脑端资源详情查看然后下载

    Redis持久化策略与AOF机制详解

    内容概要:本文详细介绍了Redis的持久化策略,特别是RDB(Redis Database Backup)和AOF(Append Only File)两种主要的持久化方法。RDB通过在某个时间点创建数据集的快照来实现数据持久化,其优点包括数据恢复快、占用资源少、数据完整性高等。AOF通过记录每个写操作命令来实现数据的持久化,其优点包括数据安全性高、数据恢复完整、可配置性强等。文章还探讨了RDB和AOF的优缺点,并给出了具体的配置示例。此外,文章讨论了AOF在主从复制和集群模式下的应用以及在高并发场景下的性能调优和数据安全的最佳实践。 适合人群:具备Redis基础知识的技术人员、运维人员。 使用场景及目标:理解和掌握Redis的持久化机制,以便在实际生产环境中选择合适的持久化策略,提高数据的安全性和系统的可靠性。 阅读建议:读者应该重点关注RDB和AOF的具体实现原理及其优缺点,结合自己的业务需求选择合适的方法。在高可用和高并发环境下,需要特别注意AOF的配置和调优策略。

Global site tag (gtag.js) - Google Analytics