zoukankan      html  css  js  c++  java
  • java8新特性-lambda(函数式接口)

    1.什么是lambda表达式

    (1)lambda表达式也被称为箭头函数,匿名函数,闭包。

    (2)lambda表达式体现的是轻量级函数式编程思想。

    (3)->符号式lambda表达式核心操作符号,符号左侧是操作函数,右侧是操作表达式。

    (4)jdk1.8新特性

    2.Model Code As Date

    (1)Model Code As Date,编码及数据,尽可能轻量级将代码封装成数据

    (2)解决方案:接口&实现类(匿名内部类)

    (3)存在问题:语法冗余,this关键字,变量捕获,数据控制

    3.为什么要使用lambda表达式

    (1)不是解决未知问题的新技术

    (2)对现有解决方案的语义的优化

    (3)需要根据实际需求考虑性能问题

    4.函数式接口(function interface)

    (1)介绍

    函数式接口就是java类型系统中的接口

    函数式接口是只包含一个接口方法的特殊接口

    语义化检测注解:@FunctionalInterface

    (2)默认方法

    /**
     * 用户身份认证(函数化接口)
     */
    @FunctionalInterface
    public interface IUserCredential {
    
        /**
         * 通过用户账号,验证用户身份信息的接口
         * @param username 要验证的用户账号
         * @return 返回用户信息
         */
        String vertify(String username);
    
        default String getCredential(String username) {
            //模拟方法
            if ("admin".equals(username)) {
                return "admin + 系统管理员";
            } else if ("manager".equals(username)) {
                return "manager + 用户管理员";
            } else {
                return "commons + 普通用户";
            }
        }
    }
    
    import com.freeht.chatpar1.IUserCredential;
    
    public class UserCredentialImpl implements IUserCredential {
    
        @Override
        public String vertify(String username) {
            if ("admin".equals(username)) {
                return "系统管理员";
            } else if ("manager".equals(username)) {
                return "用户管理员";
            } else {
                return "普通用户";
            }
        }
    }
    
    import com.freeht.chatpar1.impl.MessageFormatImpl;
    import com.freeht.chatpar1.impl.UserCredentialImpl;
    
    public class App {
        public static void main(String[] args) {
            IUserCredential userCredential = new UserCredentialImpl();
            System.out.println(userCredential.vertify("admin"));
            System.out.println(userCredential.getCredential("admin"));
        }
    }
    

    (3)静态方法

    /**
     * 消息传输格式转化接口
     */
    @FunctionalInterface
    public interface IMessageFormat {
    
        /**
         * 消息转换方法
         * @param message 要转化的消息
         * @param format 转化的格式
         * @return 返回转化后的数据
         */
        String format(String message, String format);
    
        /**
         * 通过静态方法实现(消息合法性验证)
         * @param msg
         * @return
         */
        static boolean vertifyMessage(String msg) {
            if (msg != null) {
                return true;
            } else {
                return false;
            }
        }
    }
    
    import com.freeht.chatpar1.IMessageFormat;
    
    public class MessageFormatImpl implements IMessageFormat {
    
        @Override
        public String format(String message, String format) {
            System.out.println("消息转换。。。。");
            return message;
        }
    }
    
    import com.freeht.chatpar1.impl.MessageFormatImpl;
    import com.freeht.chatpar1.impl.UserCredentialImpl;
    
    public class App {
        public static void main(String[] args) {
            String message = "hello world";
            if (IMessageFormat.vertifyMessage(message)){
                IMessageFormat messageFormat = new MessageFormatImpl();
                messageFormat.format("hello", "json");
            }
        }
    }
    

    (4)来自object继承来的方法

    @FunctionalInterface(函数式接口)允许重写object内的方法

    5.lambda和函数式接口

    (1)函数式接口只能操作一个方法

    (2)lambda表达式,只能操作一个方法,

    (3)java中的lambda表达式,核心就是一个函数式接口的实现

    6.同样可以使用匿名内部类实现函数式接口

    //匿名内部类实现接口的方法
    IUserCredential iUserCredential = new IUserCredential() {
      @Override
      public String vertify(String username) {
        return "admin".equals(username) ? "管理员" : "会员";
      }
    };
    System.out.println(iUserCredential.vertify("admin"));                        
    

    但是有很多冗余代码

    7.使用lambda表达式优化

    //使用lambda表达式优化代码
    IUserCredential credential = (String username) -> {
        return "admin".equals(username) ? "lambda 管理员" : "lambda 会员";
    };
    System.out.println(credential.vertify("admin"));
    

      

  • 相关阅读:
    Sample Page
    3.21之前刷题总结
    存储过程动态组建查询where语句
    SQL常备知识
    学习SilverLight:(1)SilverLight3.0和JavaScript交互
    SQL SERVER 2005 Tempdb
    学习atlas
    sql server系统表详细说明(转)
    js 基数排序的过程
    vuerouter 刷新页面后 url地址不变 参数还在 保留当前页 routerlink取值 this.$route
  • 原文地址:https://www.cnblogs.com/freeht/p/12988694.html
Copyright © 2011-2022 走看看