一、判空
集合判空
- 可以使用
Objects.isNull和isEmpty组合进行判空,也可以使用CollectionUtils.isEmpty进行判空,等价于上边组合。
List<String> list = new ArrayList<>();Objects.isNull(list);list.isEmpty();//上边两行等价于该行 (推荐使用)CollectionUtils.isEmpty(list);
字符串判空
- pom 文件引入包
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version></dependency>
- java 文件导入包
import org.apache.commons.lang3.StringUtils;
- 代码演示
String s = "";//判断是否为 null 和 size == 0 (带trim效果)推荐使用StringUtils.isBlank(s);//判断是否为 null 和 size == 0StringUtils.isEmpty(s);//多个判空,只要有一个为空,即返回FALSEStringUtils.isAnyBlank("124","234");
其他判空
- Integer or Long
Integer integer = new Integer(2);Objects.isNull(integer);Long lo = null;Objects.isNull(lo);
二、判断相等
String s1 = "";String s2 = "";//方法一s1.equals(s2);//方法二(推荐使用,避免空指针)Objects.equals(s1,s2);
三、Optional 实例
1.of
为非 null 的值创建一个 Optional。of 方法通过工厂方法创建 Optional 类。需要注意的是,创建对象时传入的参数不能为 null。如果传入参数为 null,则抛出 NullPointerException 。
Optional<String> optional = Optional.of("xiaoming");//传入null,抛出NullPointerExceptionOptional<Object> o = Optional.of(null);
2.ofNullable
为指定的值创建一个 Optional,如果指定的值为 null,则返回一个空的 Optional。
Optional<Object> o1 = Optional.ofNullable(null);
3.isPresent
值存在返回 true,否则返回 false
Optional<String> optiona2 = Optional.of("xiaoming");System.out.println(optiona2.isPresent());
4.get
Optional 有值就返回,没有抛出 NoSuchElementException
Optional<Object> o1 = Optional.ofNullable(null);System.out.println(o1.get());
5.ifPresent
如果 Optional 有值则调用 consumer 处理,否则不处理
Optional<Object> o1 = Optional.ofNullable(null);o1.ifPresent(s -> System.out.println(s));
6.orElse
如果有值则将其返回,否则返回指定的其它值
Optional<Object> o1 = Optional.ofNullable(null);System.out.println(o1.orElse("输出orElse")); // 输出orElse
7.orElseGet
orElseGet 与 orElse 方法类似,区别在于得到的默认值。orElse 方法将传入的字符串作为默认值,orElseGet 方法可以接受 Supplier 接口的实现用来生成默认值
Optional<Object> o1 = Optional.ofNullable(null);System.out.println(o1.orElseGet(() -> "default value")); // default value
- 注意:orElse 和 orElseGet 看似差不多,其实有很大不同;看下面例子
Shop shop = null;System.out.println("test orElse");Optional.ofNullable(shop).orElse(createNew());System.out.println("test orElseGet");Optional.ofNullable(shop).orElseGet(()->createNew());//createNewprivate static Shop createNew() { System.out.println("create new");return new Shop("尺子", 50);}//输出:test orElsecreate newtest orElseGetcreate newShop shop = new Shop("钢笔",100);System.out.println("test orElse");Optional.ofNullable(shop).orElse(createNew());System.out.println("test orElseGet");Optional.ofNullable(shop).orElseGet(()->createNew());//输出test orElsecreate newtest orElseGet
从上面两个例子可以看到,当 Optional 为空时,orElse 和 orElseGet 区别不大,但当 Optional 有值时,orElse 仍然会去调用方法创建对象,而 orElseGet 不会再调用方法;在我们处理的业务数据量大的时候,这两者的性能就有很大的差异。
8.orElseThrow
如果有值则将其返回,否则抛出 supplier 接口创建的异常。
Optional<Object> o1 = Optional.ofNullable(null);try {o1.orElseThrow(() -> new Exception("异常!"));} catch (Exception e) {System.out.println("info:" + e.getMessage());}//输出:info:异常!
9.map
如果有值,则对其执行调用 mapping 函数得到返回值。如果返回值不为 null,则创建包含 mapping 返回值的 Optional 作为 map 方法返回值,否则返回空 Optional。
Optional<String> optional = Optional.of("xiaoming");String s = optional.map(e -> e.toUpperCase()).orElse("shiyilingfeng");System.out.println(s); //输出: XIAOMING
10.flatMap
如果有值,为其执行 mapping 函数返回 Optional 类型返回值,否则返回空 Optional。与 map 不同的是,flatMap 的返回值必须是 Optional,而 map 的返回值可以是任意的类型 T
Optional<String> optional = Optional.of("xiaoming");Optional<String> s = optional.flatMap(e -> Optional.of(e.toUpperCase()));System.out.println(s.get()); //输出:XIAOMING
11.filter
List<String> strings = Arrays.asList("rmb", "doller", "ou");for (String s : strings) {Optional<String> o = Optional.of(s).filter(s1 -> !s1.contains("o"));System.out.println(o.orElse("没有不包含o的"));}//输出:rmb没有不包含o的没有不包含o的
四、汇总
public static void main(String[] args) {/** start:判空 2021/6/3 7:15 下午 *///1. 集合List<String> list = new ArrayList<>();Objects.isNull(list);list.isEmpty();//上边两行等价于该行CollectionUtils.isEmpty(list);//2. 字符串/*<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version></dependency>*/String s = "";//判断是否为 null 和 size == 0 (带trim效果)推荐使用StringUtils.isBlank(s);//判断是否为 null 和 size == 0StringUtils.isEmpty(s);/** end:判空 2021/6/3 7:15 下午 *//** start:相等 2021/6/3 7:16 下午 *///是否相等Objects.equals(s,s);/** end:相等 2021/6/3 7:21 下午 *//** start:Optional 实例 2021/6/3 7:21 下午 *///1. of: 为非 null 的值创建一个 Optional。of 方法通过工厂方法创建 Optional 类。需要注意的是,创建对象时传入的参数不能为 null。如果传入参数为 null,则抛出 NullPointerException 。Optional<String> optional = Optional.of("Hello");//传入null,抛出NullPointerExceptionOptional<Object> o = Optional.of(null);//2. ofNullable: 为指定的值创建一个 Optional,如果指定的值为 null,则返回一个空的 Optional。Optional<Object> o1 = Optional.ofNullable(null);//3. isPresent: 值存在返回 true,否则返回 falseOptional<String> o2 = Optional.of("Hello");System.out.println(o2.isPresent());//4. get Optional 有值就返回,没有抛出 NoSuchElementExceptionOptional<Object> o3 = Optional.ofNullable(null);System.out.println(o3.get());//5. ifPresent: 如果 Optional 有值则调用 consumer 处理,否则不处理Optional<Object> o4 = Optional.ofNullable("Hello");o4.ifPresent(ss -> System.out.println(ss));//6.orElse: 如果有值则将其返回,否则返回指定的其它值Optional<Object> o5 = Optional.ofNullable(null);System.out.println(o1.orElse("输出orElse")); // 输出orElse//7.orElseGet: orElseGet 与 orElse 方法类似,区别在于得到的默认值。orElse 方法将传入的字符串作为默认值,orElseGet 方法可以接受 Supplier 接口的实现用来生成默认值/*** 当 Optional 为空时,orElse 和 orElseGet 区别不大,但当 Optional 有值时,orElse 仍然会去调用方法创建对象,而 orElseGet 不会再调用方法;在我们处理的业务数据量大的时候,这两者的性能就有很大的差异。*/Optional<Object> o6 = Optional.ofNullable(null);System.out.println(o1.orElseGet(() -> "default value")); // default value//8.orElseThrow: 如果有值则将其返回,否则抛出 supplier 接口创建的异常。Optional<Object> o7 = Optional.ofNullable(null);try {o1.orElseThrow(() -> new Exception("异常!"));} catch (Exception e) {System.out.println("info:" + e.getMessage());}//输出:info:异常!//9.map: 如果有值,则对其执行调用 mapping 函数得到返回值。如果返回值不为 null,则创建包含 mapping 返回值的 Optional 作为 map 方法返回值,否则返回空 Optional。Optional<String> o8 = Optional.of("xiaoming");String str = optional.map(e -> e.toUpperCase()).orElse("shiyilingfeng");System.out.println(str); //输出: XIAOMING//10.flatMap:如果有值,为其执行 mapping 函数返回 Optional 类型返回值,否则返回空 Optional。与 map 不同的是,flatMap 的返回值必须是 Optional,而 map 的返回值可以是任意的类型 TOptional<String> o9 = Optional.of("xiaoming");Optional<String> str1 = optional.flatMap(e -> Optional.of(e.toUpperCase()));System.out.println(str1.get()); //输出:XIAOMING//11.filterList<String> strings = Arrays.asList("rmb", "doller", "ou");for (String str2 : strings) {Optional<String> o10 = Optional.of(str2).filter(s1 -> !s1.contains("o"));System.out.println(o10.orElse("没有不包含o的"));}/** end: Optional 实例 2021/6/3 7:21 下午 */}
