orElse 和 orElseGet 是 Optional 类的两个方法,用于处理可能为空的值。...区别 orElse 方法: orElse 方法接受一个默认值作为参数,并在 Optional 对象为空时返回该默认值。 无论 Optional 对象是否为空,orElse 方法都会执行默认值的计算。...; orElseGet 方法: orElseGet 方法接受一个 Supplier 函数式接口作为参数,并在 Optional 对象为空时调用该函数式接口获取默认值。...只有在 Optional 对象为空时,orElseGet 方法才会执行默认值的计算。...如果默认值的计算是简单的常量或已经存在的值,可以使用 orElse 方法。如果默认值的计算涉及复杂的逻辑或需要延迟计算,可以使用 orElseGet 方法。
该orElseGet() 方法类似于 orElse()。但是,如果没有Optional值,则不采用返回值,而是采用供应商功能接口,该接口将被调用并返回调用的值。...() 和orElseGet()之间有什么区别我们可能考虑的问题是:何时使用orElse和何时使用orElseGet?...看起来可以使用orElseGet的时候,使用orElse也可以代替(因为Supplier接口没有入参),而且使用orElseGet还需要将计算过程额外包装成一个 lambda 表达式。...具体到我们的场景,使用orElse的时候,每次它都会执行计算结果的过程,而对于orElseGet,只有Optional中的值为空时,它才会计算备选结果。这样做的好处是可以避免提前计算结果的风险。...(() -> englishName.getShortName()); }}```两个版本,分别使用orElse和orElseGet。
8 Optional.ifPresent(): ifPresent()方法在值不存在的时候,没有提供一个可选的操作。...System.out::println); Java 8 Optional.orElse(): orElse()方法在value返回值为空的之后,给出一个默认值。...中的 orElseGet() Java 8中的Optional.orElseGet()方法也具备同样的功能。...所以通过orElseGet获取一个默认值: '0' char result = Stream.of('a', 'b', 'c') .filter(c -> Character.isDigit...); //0 三、Java9的Optional.stream() 在本例中Optional.stream()方法返回仅包含一个最大值元素的Stream流。
构建API: 构建Optional对象:of()、ofNullable()、empty() 获取API: 获取Optional对象包装的值:get()、orElse()、orElseGet()、orElseThrow...、orElseGet、orElseThrow。...才会执行 orElseGet()。...和orElse的区别: 在optional为空值的情况下orElse和orElseGet都会执行,当optional不为空时,orElseGet不会执行。...套路3 结合 Stream 使用 开发中使用Stream应该是用的最多的,还是一样的套路,防止出现 List 为空。
Optional是什么 java.util.Optional Jdk8提供 Optional,一个可以包含null值的容器对象,可以用来代替xx != null的判断。...ifPresent 如果不为null值就执行函数式接口的内容。 public void ifPresent(Consumer<?...orElse 返回当前值,如果为null则返回other。 public T orElse(T other) { return value != null ?...value : other; } orElseGet orElseGet和orElse类似,只是orElseGet支持函数式接口来生成other值。...Exception e) { e.printStackTrace(); } System.out.println(); } Optional在jdk8中有大量使用,比如像Stream
示例:过滤出所有的偶数java复制代码import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public...使用 OptionalOptional 提供了多种方法来处理可能为空的值,包括 isPresent、ifPresent、orElse、orElseGet 和 orElseThrow 等。...optionalValue.ifPresent(value -> System.out.println(value)); // 输出: Hello // 使用 orElse...); // 输出: Hello // 使用 orElseGet String valueFromSupplier = optionalValue.orElseGet(() -...::stream) .map(word -> Optional.ofNullable(word).orElse("Empty")) .filter
Optional 默认值 使用 orElse, orElseGet 方法可以在没有值的情况下获取给定的默认值。...= emptyOptional.orElse("orElse default"); String orElseGet = emptyOptional.orElseGet(() -> "orElseGet...default"); System.out.println(orElse); System.out.println(orElseGet); } 得到的结果: orElse default...= emptyOptional.orElseGet(() -> getDefault()); System.out.println("空Optional.orElse结果:"+orElse);...结果:"+orElse); System.out.println("有值Optional.orElseGet结果:"+orElseGet); } public String getDefault
(new Person("小明", 2)); 2.9 Optional.orElseGet()方法(为空返回Supplier对象) 这个与orElse很相似,入参不一样,入参为Supplier对象,...()和orElseGet()还有orElseThrow()很相似,map()和flatMap()好相似 哈哈哈不用着急,都是从这一步过来的,我再给大家总结一下不同方法的异同点 orElse()和orElseGet...()和orElseThrow()的异同点 方法效果类似,如果对象不为空,则返回对象,如果为空,则返回方法体中的对应参数,所以可以看出这三个方法体中参数是不一样的 orElse(T 对象) orElseGet...相比ifPresent()多了OrElse判断。 stream()将Optional转换成stream,如果有值就返回包含值的stream,如果没值,就返回空的stream。...楠哥简介 资深 Java 工程师,微信号 nnsouthwind 《Java零基础实战》一书作者 腾讯课程官方 Java 面试官,今日头条认证大V GitChat认证作者,B站认证UP主(楠哥教你学Java
/** * 判断是否引用缺失,如果不为空(optional引用存在时执行)则执行内部函数 * 类似的方法: map filter flatMap */ nullable.ifPresent...(System.out::println); /** * 当引用缺失时执行并可以自定义返回值 */ String orElse = (String)nullable.orElse...("引用缺失"); System.out.println( "orElse:" + orElse); /** * 当引用缺失时可以自定义内部函数 */ String orElseGet...= (String)nullable.orElseGet( () -> { return "引用缺失"; }); System.out.println("orElseGet...) //如果为空则创建空的流 .orElseGet(Stream::empty) .forEach(System.out::println); } public static void
方法描述: orElseGet 方法和 orElse 方法类似,都是在 Optional 值为空时,返回一个默认操作,只不过 orElse 返回的是默认值,而 orElseGet 是执行 lambda...5.相似方法进行对比分析 可能小伙伴看到这,没用用过的话会觉得orElse()和orElseGet()还有orElseThrow()很相似,map()和flatMap()好相似,哈哈哈不用着急,都是从这一步过来的...orElse(T 对象) orElseGet(Supplier 对象) orElseThrow(异常) map()和orElseGet的异同点 方法效果类似,对方法参数进行二次包装...7.jdk1.9对Optional优化 首先增加了三个方法:or()、ifPresentOrElse() 和 stream() or() 与orElse等方法相似,如果对象不为空返回对象,如果为空则返回...相比ifPresent()多了OrElse判断。 stream()将Optional转换成stream,如果有值就返回包含值的stream,如果没值,就返回空的stream。
( () -> user2); orElse() 和 orElseGet() 的不同之处 乍一看,这两种方法似乎起着同样的作用。...不过,orElse() 方法仍然创建了 User 对象。与之相反,orElseGet() 方法不创建 User 对象。...Java 9 增强 我们介绍了 Java 8 的特性,Java 9 为 Optional 类添加了三个方法:or()、ifPresentOrElse() 和 stream()。...or() 方法与 orElse() 和 orElseGet() 类似,它们都在对象为空的时候提供了替代情况。or() 的返回值是由 Supplier 参数产生的另一个 Optional 对象。...() { List users = new ArrayList(); User user = users.stream().findFirst().orElse(new
) 2.认识Optional并使用 简单来说,Opitonal类就是Java提供的为了解决大家平时判断对象是否为空用 会用 null!...value : other; } 2.9 Optional.orElseGet()方法(为空返回Supplier对象) 这个与orElse很相似,入参不一样,入参为Supplier对象,为空返回传入对象的...()和orElseGet()还有orElseThrow()很相似,map()和flatMap()好相似 哈哈哈不用着急,都是从这一步过来的,我再给大家总结一下不同方法的异同点 orElse()和orElseGet...()和orElseThrow()的异同点 方法效果类似,如果对象不为空,则返回对象,如果为空,则返回方法体中的对应参数,所以可以看出这三个方法体中参数是不一样的 orElse(T 对象) orElseGet...相比ifPresent()多了OrElse判断。 **stream()**将Optional转换成stream,如果有值就返回包含值的stream,如果没值,就返回空的stream。
)); 2.3.3、orElseGet(Supplier<?...; 2.3.5、ifPresent(Consumer consumer)方法 ifPresent(Consumer<?...8 中 Stream 的 map 方法相差无几。...3. orElse方法的使用 3.3、orElse方法的使用 orElse 中调用的方法一直都会被执行,orElseGet 方法只有在 Optional 对象不含值时才会被调用,所以使用 orElse...此种情况下,可使用 orElseGet 方法代替它。
在 Java 8 引入Optional特性的基础上,Java 9 又为 Optional 类增加了三种方法:or()、ifPresentOrElse() 和 stream(),本文的最后,也针对这些新特性做了一些说明和实例...( () -> user2); orElse() 和 orElseGet() 之间的区别 乍一看,两种方法似乎效果相同。...但是,orElse() 方法仍然会创建默认的 User 对象。相反,orElseGet() 方法将不再创建 User 对象。...返回异常 除了 orElse() 和 orElseGet() 方法,Optional还定义了 ElseThrow() API,其作用是在对象为空时,直接抛出一个异常,而不是返回一个替代值。...6.Java 9 新增特性 在 Java 8 引入Optional特性的基础上,Java 9 又为 Optional 类增加了三种方法:or()、ifPresentOrElse() 和 stream()
()方法(判读是否为空并返回函数) 这个意思是如果对象非空,则运行函数体 源码: public void ifPresent(Consumer<? ...value : other; } 2.9 Optional.orElseGet()方法(为空返回Supplier对象) 这个与orElse很相似,入参不一样,入参为Supplier对象,为空返回传入对象的...()和orElseGet()还有orElseThrow()很相似,map()和flatMap()好相似 哈哈哈不用着急,都是从这一步过来的,我再给大家总结一下不同方法的异同点 orElse()和orElseGet...()和orElseThrow()的异同点 方法效果类似,如果对象不为空,则返回对象,如果为空,则返回方法体中的对应参数,所以可以看出这三个方法体中参数是不一样的 orElse(T 对象) orElseGet...相比ifPresent()多了OrElse判断。 stream() 将Optional转换成stream,如果有值就返回包含值的stream,如果没值,就返回空的stream。
解决空指针的"银弹" 从Java8开始引入了一个新类 java.util.Optional,这是一个对象的容器,意味着可能包含或者没有包含一个非空的值。...value : other; } // map flatmap等方法与Stream使用方法类似,这里不再赘述,读者可以参考之前的Stream系列。...举个栗子: String str = "hello java8"; // output: hello java8 Optional.ofNullable(str).ifPresent(System.out...); filter, map, flatMap 在三个方法在前面讲Stream的时候已经详细讲解过,读者可以翻看之前写的文章,这里不再赘述。...(city).orElse("unknown"); } orElseGet 如果value为空,则调用Supplier实例返回一个默认值。
()方法 // 对value做NULL判断,转换为Stream类型 public Stream stream() { if (!...isPresent()) { return Stream.empty(); } else { return Stream.of(value); } } orElse..."值 String value = Optional.ofNullable(v1).orElse(v2); orElseGet()方法 // 值不为NULL则直接返回value,否则返回Supplier...#get() public T orElseGet(Supplier<?...value : supplier.get(); } orElseGet()只是orElse()方法的升级版,例如: String v1 = null; Supplier v2 = ()
接下来的博文直接上用法了,想了解更多,建议阅读以下两篇博文: 一文带你入门Java Stream流,太强了 Java 8 Optional 最佳指南 Stream 流的操作可以分为两种类型: 1)中间操作...java.util.List; import java.util.Random; import java.util.stream.Collectors; import java.util.Map;...."); opt.ifPresent(str -> System.out.println(str.length())); Java 9 后还可以通过方法 ifPresentOrElse(action,...设置(获取)默认值 有时候,我们在创建(获取) Optional 对象的时候,需要一个默认值,orElse() 和 orElseGet() 方法就派上用场了。...(name); // 输出:id10t. orElseGet() 方法与 orElse() 方法类似,但参数类型不同。
领取专属 10元无门槛券
手把手带您无忧上云