一、JAVA8学习笔记 Lambda表达式快速入门

一、扯淡 Why Java8 Streams?

为什么要学习java8 流技术 、Lambda 表达式等 ?

一个很好的目的就是:

  • 希望最简单的并发执行你的程序,且避免用 Synchronized控制线程安全。
  • 采用Stream技术,再也用不着去费劲搞Thread多线程了。
  • 使用Java 8,你就是在保护你作为Java工程师的职业生涯 _

二、What is 函数式接口 ?

函数式接口的概念:只定义一个抽象方法的接口

用函数式接口可以干什么呢? Lambda表达式最喜欢函数式接口!

举例说明:定义一个只有一个方法的接口,实现该接口打印字符串"Hello !"

第一步 定义接口

@FunctionalInterface  
public interface ShowMsg {
   void printMSG();
}

注解 @FunctionalInterface 的作用类似于 @Overried, 表示限制只能有一个接口

第二步 实现接口

public class ShowMsgHello implements ShowMsg {
    @Override
    public void printMsg() {
        System.out.println("Hello !");
    }
}

第三步 测试接口

public static void main(String[] args) {
   ShowMsg show = new ShowMsgHello();
   show.printMsg();
}

第三步 换一种方式测试接口

如果采用Lambda表达式则可以不用定义实现类,直接一行代码即可:

public static void main(String[] args) {
    ShowMsg show = () -> System.out.println("Hello !");
    show.printMsg();
}

主要看操作符 “->” , 请不要把它看成类似于C++里面的指针什么的,
通俗讲它就是一个分割符,分割函数参数部分和函数体部分。
整个 “() -> System.out.println(“Hello !”) ”这段代码其实就是接口ShowMsg的匿名类实例对象。

针对其他类别的抽象方法的处理如下:
(1)如果接口方法是:void printMsg(String msg);
则 Lambda表达式:(msg) -> System.out.println(msg);
或者:msg -> System.out.println(msg); // 单个参数可以舍弃参数两边的”(”和”)” ,多个参数则必须有两边的”(”和”)”。

(2)如果接口方法是:String printMsg( );
则Lambda表达式:() -> “Hello !”; // 这里无需 return 关键字

(3)如果函数体内语句多个则需要“{}”
Lambda表达式:() -> {String msg = “Hello !”; System.out.println(msg);};

三、总结

  • 函数式接口就是只定义一个抽象方法的接口
  • Lambda表达式可直接作为一个函数式接口的匿名实现类对象(一个实实在在的Java实体对象)

没有java8之前也有很多函数式接口:

java.util.Comparator
public interface Comparator<T> {
	int compare(T o1, T o2);
}

java.lang.Runnable
public interface Runnable{
	void run();
}

Comparator 和 Runnable 都是耳熟能详的老接口了。

没有Lambda的年代采用匿名内部类:
看上去很笨拙

Runnable r2 = new Runnable(){
	public void run(){
		System.out.println("Hello World 2");
	}
};

进入 Lambda 的时代:


Runnable r1 = () -> System.out.println("Hello World 1");

是否让你感觉很简洁 ?

Over …

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值