zoukankan      html  css  js  c++  java
  • Java 8 Optional

    这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。

    package com.polaris;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.Optional;
    
    /**
     * @author :sixinshuier
     * @date :Created in 2020/6/3 14:35
     * @description:java 8 optional
     * @modified By:
     */
    public class TestOptional {
    
        public static void main(String[] args) {
            //1. of 为非null的值创建一个Optional。of方法通过工厂方法创建Optional类。需要注意的是,创建对象时传入的参数不能为null。如果传入参数为null,则抛出NullPointerException 。
            Optional<String> name = Optional.of("polaris");
    
            //2. isPresent() 如果有值,则返回true,否则返回false
            if (name.isPresent()) {
                System.out.println(name.get());//如果Optional有值则将其返回,否则抛出NoSuchElementException。
            }
    
            Optional<String> name1 = Optional.of("");
    
            // isPresent() 如果有值,则返回true,否则返回false
            if (name1.isPresent()) {
                System.out.println(name1.get());//如果Optional有值则将其返回,否则抛出NoSuchElementException。
            }
    
            // 3. ifPresent 如果Optional实例有值则为其调用consumer,否则不做处理
            name.ifPresent((value) -> {
                System.out.println("lambda value" + value);
            });
    
            // 4. orElse ,orElseGet orElseGet与orElse方法类似,区别在于得到的默认值。orElse方法将传入的字符串作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值
            System.out.println(name1.orElse("polaris1"));
            System.out.println(name1.orElseGet(() -> "defalue value"));
            System.out.println(name1.orElseGet(String::new));
    
            //5. orElseThrow 如果有值则将其返回,否则抛出supplier接口创建的异常
            name1.orElseThrow(IllegalArgumentException::new);
    
            // 6.map 如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。
            Optional<String> upperName = name.map((value) -> value.toUpperCase());
            System.out.println(upperName.orElse("No value found"));
    
            //7. flatMap 如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap方法与map方法类似,区别在于mapping函数的返回值不同。map方法的mapping函数返回值可以是任何类型T,而flatMap方法的mapping函数必须是Optional。
            upperName = name.flatMap((value) -> Optional.of(value.toUpperCase()));
            System.out.println(upperName.get());
    
            //8. filter 如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional。
            List<String> names = Arrays.asList("polaris", "start");
            for (String s : names) {
                Optional<String> nameLenLessThan7 = Optional.of(s).filter((value) -> value.length() < 7);
                System.out.println(nameLenLessThan7.orElse("The name is more than 6 characters"));
            }
        }
    }
  • 相关阅读:
    系统调用(转)
    linux 特殊符号(转)
    对物权法第十二章建设用地使用权解读(转载)
    地籍管理信息化总体设计纲要
    行业管理架构初探
    基础框架平台——基础管理框架——GUI实现设计(一)
    通过类库来实现多窗体windows程序遇到了些问题,请大家有空帮忙看一下,谢谢
    基础框架平台——基础管理框架——GUI抽象设计(布局管理器)
    基础框架平台——基础管理框架——GUI抽象设计(工作台)
    当窗体最大化后,系统提示"集合在窗体变化时发生了修改",请问是什么缘故啊?
  • 原文地址:https://www.cnblogs.com/shix0909/p/13037615.html
Copyright © 2011-2022 走看看