1、对象判空
Objects.isNull(object);//对象判空
Object object=null;
System.out.println(Objects.isNull(object));
//true
//import java.util.Objects;
//不为空
Objects.nonNull(str);
2、String判空
//第一种guava的Strings判空
Strings.isNullOrEmpty(name);//字符串判空,是否为 null,是否为 “”
String str="";
boolean rs=Strings.isNullOrEmpty(str);
//true
System.out.println(rs);
str=" ";
//false
System.out.println(rs);
//第一种String不为空
String str=" ";
boolean rs= StringUtils.isNotEmpty(str);
//不为空
System.out.println(rs);
需要引入谷歌guava的maven
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>22.0</version>
</dependency>
//第二种,commons-lang3的判空
import org.apache.commons.lang3.StringUtils;
rs=StringUtils.isBlank(str);
//true
System.out.println(rs);
StringUtils的isBlank()方法可以一次性校验这三种情况,是否为null,是否为"",是否为空字符串(引号中间有空格) 如:" "。制表符、换行符、换页符和回车,返回值都是true,否则为false。
//第二种,判不为空
String str=" ";
rs=StringUtils.isNotEmpty(str);
System.out.println(rs);
需要引入lang3的maven
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
3、集合判空
1、判断集合是否为空:
import org.apache.commons.collections4.CollectionUtils;
CollectionUtils.isEmpty(null): true
CollectionUtils.isEmpty(new ArrayList()): true
CollectionUtils.isEmpty({a,b}): false
//不为空
rs=CollectionUtils.isNotEmpty(myList);
System.out.println(rs);
2、判断Map是否为空
MapUtils.isNotEmpty
boolean rs=true;
Map myMap= Maps.newHashMap();
rs= MapUtils.isEmpty(myMap);
System.out.println(rs);
rs= MapUtils.isNotEmpty(myMap);
System.out.println(rs);
需要引入的maven
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.2</version>
</dependency>
3、spring的集合判空
import org.springframework.util.CollectionUtils;
CollectionUtils.isEmpty(nameMap);//map判空
CollectionUtils.isEmpty(nameList);//list判空
需要引入的maven包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
4、java8的一些防空优化
// 等同于条件运算符的效果:Objects.isNull(value) ? "" : value;
String value = map.getOrDefault("支付","");
// Apache MapUtils,如果版本低于1.8
String value = MapUtils.getString(map, "支付", "");
Map<String,List<String>> myMap= Maps.newHashMap();
//Absent缺席,不存在
myMap.computeIfAbsent("java框架", key -> new ArrayList<>()).add("Spring");
myMap.putIfAbsent("java基础",new ArrayList<String>()).add("sss");
//这是错误的,当 Map 中 key 对应 value 不存在的时候,putIfAbsent将会直接返回 null。
//而 computeIfAbsent将会返回 mappingFunction计算之后的值,像上面的场景直接返回就是 new ArrayList。
//这一点需要注意一下,切勿用错方法,导致空指针。
5、Optional的一些防空优化
User user = null;
System.out.println(Optional.ofNullable(user).map(u -> u.getName()).orElse("Unknown"));
//Present 现在,存在
// 传入正常值,正常返回一个 Optional 对象
Optional<String> optional1 = Optional.ofNullable("java");
// 传入 null 参数,正常返回 Optional 对象,运行代码,可以观察到正常传入值和传入 null 值时,都没有抛出异常。
Optional optional2 = Optional.ofNullable(null);
//NPE异常
//Optional optional3 = Optional.of(null);
//设置默认值
Optional<String> optional=Optional.ofNullable(null);
String object = optional.orElse("默认值");
System.out.println(object);
Optional optional=Optional.ofNullable(null);
//Java常用函数式接口之Supplier接口
Object object2 = optional.orElseGet(()->{
return "hello";
});
System.out.println(object2);