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())
            );
        }
    }
    
  • 相关阅读:
    【html5构建触屏网站】之touch事件
    优化网站加载速度的14个技巧
    存储
    [概念] javascript构造函数和普通函数的
    nodejs中的 Cannot read property'text' of undefined 问题
    整理js继承
    清除浮动的五种方法
    用canvas绘制一个时钟
    javascript运动框架
    $(document).ready()与window.onload的区别(转发)
  • 原文地址:https://www.cnblogs.com/Lothlorien/p/11999977.html
Copyright © 2011-2022 走看看