java8特性 Optional 工具类

1. 关于Java8工具类Optional的一点使用心得
  对于Java开发中遇到的npe(空指针问题),其实使用工具类Optional处理效果一般,个人感觉最大的用处就是可以减少一定的if语句,减少一定的非空判断,千万不能将Optional放在if内,会非常多此一举。

个人觉得最实用的例子:
  如果获取不到student的name属性(为空),那么将使用student的rename属性,即使rename、name为空,也不会出现空指针异常。

import lombok.Data;

import java.util.Optional;

public class qwe {

    //java fhadmin.cn

    public static void main(String[] args) {

        Student student = new Student();

        student.setReName("tom");

        Student student1 = new Student();

        student1.setName( Optional.ofNullable(student.getName()).orElseGet(student::getReName)); //

        System.out.println(student1);

    }

    @Data

    static class Student{

        String name;

        String reName;

    }

}

2. 工具类

package com.ven.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* java 8 Optional 工具类
* @author fhadmin
* @from fhadmin.cn
* @ version 1.0
*/
public class OptionalUtil {

/**
* 判断输入的字符串是否为空
* @param str String
* @return
*/
public static boolean isEmpty(String str){
return Optional.ofNullable(str).isPresent();
}

/**
* 判断输入的Integer是否为空
* @param num Integer
* @return
*/
public static boolean isEmpty(Integer num){
return Optional.ofNullable(num).isPresent();
}
/**
* 判断输入的Double是否为空
* @param dnum Double
* @return
*/
public static boolean isEmpty(Double dnum){
return Optional.ofNullable(dnum).isPresent();
}
/**
* 判断输入的Object是否为空
* @param obj
* @return
*/
public static boolean isEmpty(Object obj){
return Optional.ofNullable(obj).isPresent();

}

/**
* 判断输入的List是否为空,获取该对象
* @param obj
* @return
*/
public static Object get(Object obj){
return Optional.ofNullable(obj).isPresent()!=false?Optional.ofNullable(obj).get():null;

}
/**
* 测试
* @param args
*/
@SuppressWarnings("unchecked")
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
List<String> objList = (List<String>) OptionalUtil.get(list);
objList.forEach(item->{System.out.println(item);});

String str = null;
System.out.println("当前对象:"+OptionalUtil.get(str));

}
}

(0)

相关推荐

  • java连接redis存取数据(详细)

    声明:本文章仅供参考,学无止境,若有不足之处请指出,非常感谢! 源代码+相关工具下载:https://download.csdn.net/download/corleone_4ever/1081125 ...

  • 求求你,不要再使用!=null判空了!

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误. 那么,有什么办法可以避免在代码中写大量的判空语句呢? 有人说可以 ...

  • Java8的Optional是不是鸡肋?

    以下文章来源于yes的练级攻略 ,作者是Yes呀 yes的练级攻略 用接地气的话来分享一些后端技术或写一些想写的. 又是一个阳光明媚的下午,扯淡群里面又在讨论技术,啧啧. 马哥发言道: 原因是他的一位 ...

  • C# 中的IComparable和IComparer

    前言 在开发过程中经常会遇到比较排序的问题,比如说对集合数组的排序等情况,基本类型都提供了默认的比较算法,如string提供了按字母进行排序,而int整数则是根据整数大小进行排序.但是在引用类型中(具 ...

  • .NET Core MemoryCache的使用

    好像是没有 nuget 包的直接using即可. using Microsoft.Extensions.Caching.Memory; 1 public static class CacheHelpe ...

  • 开始使用 java8 的日期工具类

    例如,现有的类(例如java.util.Date和SimpleDateFormatter)不是线程安全的,这会导致用户潜在的并发问题.而新的LocalDate.LocalDateTime.DateTi ...

  • 不要再封装各种Util工具类了,这个神级框架值得拥有!

    重磅干货,第一时间送达 来自:方志朋 大家好,我是你们帅气的熊猫哥! Hutool 谐音 "糊涂",寓意追求 "万事都作糊涂观,无所谓失,无所谓得" 的境界. ...

  • 数据如何指导工具类产品的场景延伸和变现?

    诸葛君说:近日,某相机app发布了一个叫AI测肤的功能,说是用人工智能的方法检测用户的皮肤问题,预测出你的肤龄,最后给一个综合评分.不过继续往下拉,你就会看到系统会给你推荐的每一个护肤.化妆步骤所需要 ...

  • 工具类产品为支点 好车主互助撬动万亿汽车后市场

    以往互联网公司都是通过建设平台,以解决交易双方的信息不透明.不对称为主要的创业方向,如阿里解决的卖家与买家的信息不对称,滴滴解决的是出租车与打车人的信息不对称-- 但随着互联网对生活的渗透度逐渐增加, ...

  • Java常用的时间工具类DateTimeUtils.java对常用的时间操作方法总结

    话不多少,直接上代码!时间工具类DateTimeUtils.java 汇总了以前常用的时间操作方法! 工具类方法列表: 将 String 转为 date 日期字符串格式化输出 Date类型日期转字符串 ...

  • 【.NET / C#】SubarrayUtils(查找子数组工具类)

    C# 查找子数组工具类 /// <summary>/// Code shared to do searches/// </summary>public class Subarr ...

  • 【C#】工具类-FTP操作封装类FTPHelper

    C# FTPHelper实现FTP服务器文件读写操作,支持SSL协议(FTP服务器为:Serv-U10.0). using System;using System.Collections.Generi ...

  • 【新提醒】Log工具类(含食用说明和演练)

    本帖最后由 ꯭清꯭羽꯭ღ 于 2019-6-27 17:57 编辑 在这里,丢一个自制的Log工具类,用于逆向分析和调试,特点: ◎可以输出任何格式的对象(String Object等等) ◎显示输出 ...

  • 【新提醒】实战使用Log工具类

    相信很多同学都是一脸懵逼的,所以重新开一个帖子,演练一次给大家看 点击直达Log工具类说明 好了,这次的演练是输出一个被加密的字符串 将工具类塞入到工程后,打开主界面 初始化 输出解密后的数据 保存编 ...