Optional类使用demo

介绍

java8之后推出了Optional用于处理一些空指针

代码

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class OptionalDemo {
    public void test1() {
        Integer a = null;
        int b = Optional.ofNullable(a).orElse(0);
        List<Integer> list = null;
        List<Integer> c = Optional.ofNullable(list).orElse(new ArrayList<>());
        System.out.println(b);
        System.out.println(c.size());
    }

    public void test2() {
        TestClass testClass = null;
        TestClass addTestClass = new TestClass();
        addTestClass.setAge(10);
        addTestClass.setName("addTestClass");
        TestClass result = Optional.ofNullable(testClass).orElse(addTestClass);
        System.out.println(result.toString());
        TestClass testClass2 = new TestClass();
        testClass2.setName("testClass2");
        TestClass result2 = Optional.ofNullable(testClass2).orElse(addTestClass);
        System.out.println(result2.toString());
    }

    /**
     * orElse不管是不是空方法一定会调用
     * orElseGet只有是空时才调用
     */
    public void test3() {
        Optional<String> opt = Optional.of("test");
        System.out.println("orElse:");
        String a = opt.orElse(getDefaultValue());
        System.out.println(a);
        System.out.println("orElseGet:");
        String b = opt.orElseGet(() -> getDefaultValue());
        System.out.println(b);
    }

    public String getDefaultValue() {
        System.out.println("getDefaultValue do");
        return "default";
    }

    /**
     * orElse不管是不是空方法一定会调用
     * orElseGet只有是空时才调用
     */
    public void test4() {
        System.out.println("not null");
        System.out.println("orElse:");
        Integer opt = 2;
        int a = Optional.ofNullable(opt).orElse(getDefaultValue2());
        System.out.println(a);
        System.out.println("orElseGet:");
        int b = Optional.ofNullable(opt).orElseGet(() -> getDefaultValue2());
        System.out.println(b);
        System.out.println("is null");
        Integer opt2 = null;
        int c = Optional.ofNullable(opt2).orElse(getDefaultValue2());
        System.out.println(c);
        System.out.println("orElseGet:");
        int d = Optional.ofNullable(opt2).orElseGet(() -> getDefaultValue2());
        System.out.println(d);
    }

    /**
     * Optional 的链式函数式编程
     * filter()过滤
     * map()收集
     * flatMap()收集,但是返回值要为Optional<?>形式
     */
    public void test5() {
        TestClass testClass = null;
        TestClass testClass2 = new TestClass();
        testClass2.setName("testClass2");
        testClass2.setAge(100);
        Optional<TestClass> opt = Optional.ofNullable(testClass);
        System.out.println("ofNullable:");
        System.out.println(opt.isPresent());
        TestClass opt2 = Optional.ofNullable(testClass).orElse(new TestClass());
        System.out.println(opt2 == null);
        System.out.println("map:");
        String name = Optional.ofNullable(testClass).map(t -> t.getName()).orElse("defaultName");
        System.out.println(name);
        String name1 = Optional.ofNullable(testClass2).map(t -> t.getName()).orElse("defaultName");
        System.out.println(name1);
        System.out.println("filter:");
        Optional<TestClass> result1 = Optional.ofNullable(testClass2)
                .filter(t -> t.getName() != null && t.name.equals("testClass2"));
        System.out.println(result1.isPresent());
        System.out.println(result1.orElse(new TestClass()).toString());
        Optional<TestClass> result2 = Optional.ofNullable(testClass2)
                .filter(t -> t.getName() != null && t.name.equals("error"));
        System.out.println(result2.isPresent());
        System.out.println(result2.orElse(new TestClass()).toString());
        System.out.println("flatMap:");
        String realName = Optional.ofNullable(testClass2)
                .flatMap(t -> t.getRealName()).orElse("default");
        System.out.println(realName);
        String realName2 = Optional.ofNullable(testClass)
                .flatMap(t -> t.getRealName()).orElse("default");
        System.out.println(realName2);
    }

    public Integer getDefaultValue2() {
        System.out.println("getDefaultValue2 do");
        return 1;
    }

    public static void main(String[] args) {
        OptionalDemo optionalDemo = new OptionalDemo();
        optionalDemo.test1();
        optionalDemo.test2();
        optionalDemo.test3();
        optionalDemo.test4();
        optionalDemo.test5();
    }

    public class TestClass {
        private Integer age;
        private String name;

        public Optional<String> getRealName() {
            return Optional.ofNullable(name);
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "TestClass{" +
                    "age=" + age +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Java的Optional时,以下是一些常见的用法和示例案例: 1. 创建Optional对象: ```java Optional<String> optionalValue = Optional.of("Hello"); Optional<String> emptyOptional = Optional.empty(); Optional<String> nullableOptional = Optional.ofNullable(null); ``` 2. 判断Optional对象是否有值: ```java Optional<String> optionalValue = Optional.of("Hello"); boolean hasValue = optionalValue.isPresent(); // true ``` 3. 获取Optional对象的值: ```java Optional<String> optionalValue = Optional.of("Hello"); String value = optionalValue.get(); // "Hello" ``` 4. 获取Optional对象的值(安全方式): ```java Optional<String> optionalValue = Optional.of("Hello"); String value = optionalValue.orElse("Default Value"); // "Hello" Optional<String> emptyOptional = Optional.empty(); String value2 = emptyOptional.orElse("Default Value"); // "Default Value" ``` 5. 如果Optional对象非空,执行操作: ```java Optional<String> optionalValue = Optional.of("Hello"); optionalValue.ifPresent(val -> System.out.println(val)); // 输出 "Hello" ``` 6. 如果Optional对象非空,执行操作;否则执行其他操作: ```java Optional<String> optionalValue = Optional.of("Hello"); optionalValue.ifPresentOrElse( val -> System.out.println(val), () -> System.out.println("No value")); // 输出 "Hello" Optional<String> emptyOptional = Optional.empty(); emptyOptional.ifPresentOrElse( val -> System.out.println(val), () -> System.out.println("No value")); // 输出 "No value" ``` 7. 使用map转换Optional对象的值: ```java Optional<String> optionalValue = Optional.of("Hello"); Optional<Integer> lengthOptional = optionalValue.map(String::length); lengthOptional.ifPresent(val -> System.out.println(val)); // 输出 5 ``` 8. 使用flatMap转换Optional对象的值: ```java Optional<String> optionalValue = Optional.of("Hello"); Optional<Character> firstCharOptional = optionalValue.flatMap(val -> { if (val.isEmpty()) { return Optional.empty(); } else { return Optional.of(val.charAt(0)); } }); firstCharOptional.ifPresent(val -> System.out.println(val)); // 输出 'H' ``` 这些是Java Optional的一些常见用法和示例案例。根据具体需求,你可以选择适合的用法来处理Optional对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值