java8新特性-lambda(1)

时间:2020-06-01 23:42:27   收藏:0   阅读:75

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"));

  

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!