zoukankan      html  css  js  c++  java
  • Optional接口简记

    @Data
    public class Employee {
        private String name;
    }
    
    @Data
    public class Company {
    
        private String name;
    
        private List<Employee> employees;
    }
    
    /**
     * optional接口, optional的使用都是基于函数式的用法, 不写if-else判断
     * optional 无法序列化, 不要将她作为方法参数 或 类的成员变量, 只用在方法的返回值上,
     * 用来规避空指针异常
     */
    public class OptionalTest {
    
        @Test
        public void test() {
            Optional<String> optional = Optional.of("hello");
            // 无用的使用方式
            if (optional.isPresent()) {
                System.out.println(optional.get());
            }
    
            // 推荐的使用方式
            optional.ifPresent(item -> System.out.println(item));
        }
    
        @Test
        public void test2() {
            Optional<String> optional = Optional.empty();
            // 推荐的使用方式, 没有值将不执行传入的方法
            optional.ifPresent(item -> System.out.println(item));
            System.out.println("---------------------------------");
    
            System.out.println(optional.orElse("world"));
            System.out.println("---------------------------------");
    
            System.out.println(optional.orElseGet(() ->  "nihao"));
            System.out.println("---------------------------------");
    
        }
    
        @Test
        public void Test3() {
            Employee employee = new Employee();
            employee.setName("zhangsan");
    
            Employee employee2 = new Employee();
            employee2.setName("lisi");
    
            Company company = new Company();
            company.setName("company");
    
            List<Employee> employees = Arrays.asList(employee, employee2);
            company.setEmployees(employees);
    
            List<Employee> list = company.getEmployees();
    
            // 传统手工艺做法:
            /*
            if (null != list) {
                return list;
            } else {
                return new ArrayList<Employee>();
            }
            */
            // 崭新的函数式风格
            Optional<Company> optional = Optional.ofNullable(company);
            System.out.println(
                    optional.map(c -> c.getEmployees()).orElse(Collections.emptyList())
            );
        }
    }
    
  • 相关阅读:
    codeforces——模拟
    线段树水题
    编码格式分类: 前后端传递数据的编码格式contentType
    爬虫之爬取求职小网站
    auth 模块使用篇
    后端获取前端的多个数据用getlist
    字符串值的替换
    单例的5种开启方式
    forms 组件的功能和使用
    cookie和session 的初步介绍
  • 原文地址:https://www.cnblogs.com/Lothlorien/p/11999977.html
Copyright © 2011-2022 走看看