Optional使用
程序员文章站
2022-06-08 10:18:48
...
首先:
配合函数式编程发挥最大作用。
一定要避免:
if(obj.ifPresent()){
...
}else{
...
}
三种构造方式:
Optional.of(obj):要求传入对象不能为空
Optional.ofNullable(obj):传入对象可以为空
Optional.empty():空
ifPresent,orElse,orElseGet使用
package com.spc.testoptional;
import java.util.Optional;
/**
* @author 苏平超
*方法参数为空时会直接报异常
*Optional<Integer> a=null; a.isPresent()任何对a的调用都会报错,因为a指向的是Optional<Integer>对象
*应该像下面这样定义
*/
public class test1 {
public static void main(String[] args) {
Integer a=null;
Integer b=3;
Optional<Integer> c=Optional.ofNullable(a);
Optional<Integer> d=Optional.ofNullable(b);
testIfPresent(d);
testOrElse(c);
testOrElseGet(c);
}
/**
* @param e
* 存在则做事
*/
public static void testIfPresent(Optional<Integer> e) {
e.ifPresent(System.out::println);
}
/**
* @param e
* 存在即返回,无则返回默认值
* 调用orElse()返回orElse()的参数,不会往e里添加元素
* 所以e.ifPresent(System.out::println);判断还是为空
*/
public static void testOrElse(Optional<Integer> e) {
Integer temp=4;
System.out.println(e.orElse(temp));
//e.ifPresent(System.out::println);
}
/**
* @param e
* 存在即返回,无则由函数产生
* 调用orelseget,调用函数
*/
public static void testOrElseGet(Optional<Integer> e) {
System.out.println(e.orElseGet(()->get()));
}
public static Integer get() {
return 5;
}
}
map函数使用(理解意思):
当 user.isPresent() 为真, 获得它关联的 对象, 为假则返回一个空集合时, 我们用上面的 orElse, orElseGet 方法都乏力时, 那原本就是 map 函数的责任
错误使用方法1:
if(user.isPresent()) {
return user.get().getOrders();
} else {
return Collections.emptyList();
}
正确使用方法1:
return user.map(u -> u.getOrders()).orElse(Collections.emptyList())
错误使用2:
User user = .....
if(user != null) {
String name = user.getUsername();
if(name != null) {
return name.toUpperCase();
} else {
return null;
}
} else {
return null;
}
正确使用2(name是上一级获得的参数):
return user.map(u -> u.getUsername())
.map(name -> name.toUpperCase())
.orElse(null);
注意:这里user本身就是实例了,如果最终都不为空的话最终返回的就是user.getUsername().toUpperCase(),第一个map里的u就是参数及user
推荐阅读
-
解析PHP 使用curl提交json格式数据_PHP
-
剖析使用PHP shell脚本
-
怎样使用node做出个人号机器人
-
在编写存储过程时使用 Set NoCount On_MySQL
-
百度地图简单使用--添加折线,圆形等(html,js)_html/css_WEB-ITnose
-
使用VueAwesomeSwiper容易出现的问题?
-
jquery中eq和get的区别与使用方法_jquery
-
使用了min-height后出现了问题_html/css_WEB-ITnose
-
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包_jquery
-
使用Github进行协作开发