Java8之Lambda表达式

目录

1、 函数式编程思想概述

2、冗余的Runnable代码

3、体验Lambda的更优写法

4、回顾匿名内部类

5、Lambda标准格式

6、练习使用Lambda的标准格式

7、Lambda的参数和返回值

8、Lambda省略格式

9、Lambda使用前提


1、 函数式编程思想概述

2、冗余的Runnable代码

代码分析:


对于 Runnable 的匿名内部类用法,可以分析出几点内容:
Thread 类需要 Runnable 接口作为参数,其中的抽象 run 方法是用来指定线程任务内容的核心;

为了指定 run 的方法体,不得不需要 Runnable 接口的实现类;
为了省去定义一个 RunnableImpl 实现类的麻烦,不得不使用匿名内部类;
必须覆盖重写抽象 run 方法,所以方法名称、方法参数、方法返回值不得不再写一遍,且不能写错;
而实际上,似乎只有方法体才是关键所在。

编程思想的转换:做什么,而不是怎么做!看重的是最终的结果,而不是实现结果的过程。

3、体验Lambda的更优写法

借助Java 8的全新语法,上述 Runnable 接口的匿名内部类写法可以通过更简单的Lambda表达式达到等效:

public class Demo02LambdaRunnable {
    public static void main(String[] args) {    
        new Thread(() ‐> System.out.println("多线程任务执行!")).start(); // 启动线程        
    }    
}

这段代码和刚才的执行效果是完全一样的,可以在1.8或更高的编译级别下通过。从代码的语义中可以看出:我们
启动了一个线程,而线程任务的内容以一种更加简洁的形式被指定。
不再有“不得不创建接口对象”的束缚,不再有“抽象方法覆盖重写”的负担,就是这么简单!

4、回顾匿名内部类

public class Demo04ThreadNameless {
    public static void main(String[] args) {    
    new Thread(new Runnable() {        
          
        public void run() {            
        System.out.println("多线程任务执行!");                
        }            
        }).start();        
    }    
}

5、Lambda标准格式

6、练习使用Lambda的标准格式

7、Lambda的参数和返回值

package com.dzg.lambda;

import com.dzg.domain.Person;

import java.util.Arrays;
import java.util.Comparator;

public class TraditionalSortAge {

    public static void main(String[] args) {

        Person[] peoples = {
                new Person("张三",20),
                new Person("李四",30),
                new Person("王五",18)
        };

        /**
         * 匿名内部类
         */
        Comparator<Person> comp = new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return  o1.getAge() - o2.getAge();
            }
        };
        Arrays.sort(peoples,comp);

        for (int i = 0; i < peoples.length; i++) {
            System.out.println(peoples[i]);
        }

    }
}

Lambda写法:

package com.dzg.lambda;

import com.dzg.domain.Person;

import java.util.Arrays;
import java.util.Comparator;

public class TraditionalSortAge {

    public static void main(String[] args) {

        Person[] peoples = {
                new Person("张三",20),
                new Person("李四",10),
                new Person("王五",18)
        };

        /**
         * 匿名内部类
         */
        Comparator<Person> comp = new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return  o1.getAge() - o2.getAge();
            }
        };
        Arrays.sort(peoples,comp);

        /**
         * Lambda形式
         */
        /*Comparator<Person> comp = (o1, o2) -> o1.getAge() - o2.getAge();

        Arrays.sort(peoples,(o1, o2) -> o1.getAge() - o2.getAge());
*/
        Arrays.sort(peoples,(Person p1,Person p2) -> p1.getAge() - p2.getAge());

        for (Person person:
             peoples) {
            System.out.println(person);
        }
        /*for (int i = 0; i < peoples.length; i++) {
            System.out.println(peoples[i]);
        }*/

    }
}

Lambda标准有参数的格式:

8、Lambda省略格式

package com.dzg.lambda.standard;

public class DemoInvokeCook {

    public static void main(String[] args) {
        invokeCook(() -> {
            System.out.println("吃饭啦");
        });

        invokeCook(() -> System.out.println("吃饭啦"));
    }
    
    private static void invokeCook(Cook cook){
        cook.makeFood();
    }
}

9、Lambda使用前提

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值