Java Optional orElse() 和 orElseGet() Optional.flatMap()和
Java Optional 的 orElse() 和 orElseGet() 的区别1. 接收的参数不同
public T orElse(T t)
public T orElseGet(Supplier<? extends T> other)
2. 程序的执行过程不同以下面一段代码为例: public static void main(String[] args) { String[] names = new String[]{"zhang","wang","li","zhao","wu"}; Optional.of("wang").orElse(getRandomName(names)); // 执行该句时会打印"Generating a name..." Optional.of("wang").orElseGet(() -> getRandomName(names)); } public static String getRandomName(String[] names) { System.out.println("Generating a name..."); Random random = new Random(); return names[random.nextInt(5)]; }
在上述代码在运行 产生上述现象的原因是,无论Optional对象中的值是否为空, 3. 性能差异由于 因此,只有当默认值已经事先定义的情况下,才使用 ? ================================================================================= ? 使用 public static void main(String[] args) { Optional<String> s = Optional.of("input"); System.out.println(s.map(Test::getOutput)); System.out.println(s.flatMap(Test::getOutputOpt)); } static Optional<String> getOutputOpt(String input) { return input == null ? Optional.empty() : Optional.of("output for " + input); } static String getOutput(String input) { return input == null ? null : "output for " + input; }
这两个语句输出相同的东西。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Java并发编程:Lock
- 如何在不重置参数值的情况下引用构造函数
- 如何在java中将月份转换成几个月
- java – HttpComponents PoolingHttpClientConnectionManag
- Java进阶(1) - Object类
- java – 如何在Eclipse中找到哪些类实现多个接口?
- java – 如何在Spring Web MVC Cycle中运行formbackingobje
- Java中的char和int
- java.lang.UnsatisfiedLinkError:无法在Windows x86机器上
- 用于32位带符号二进制字符串的Java Integer.parseInt()会引