Java—JDK8新特性—Lambda表达式【内含思维导图】

文章详细介绍了JDK8中的Lambda表达式,包括其作为匿名函数的概念、使用Lambda的原因、基本语法、类型推断以及在实际编程中的应用,如简化代码和排序场景。通过示例展示了Lambda如何替代匿名内部类,提高代码的简洁性和可读性。
摘要由CSDN通过智能技术生成

目录

JDK8新特性

2.Lambda表达式

思维导图

2.1 什么是Lambda表达式

2.2 为什么使用Lamdba表达式

2.3 Lambda表达式基本语法

2.4 类型推断

2.5 Lambda练习

2.6 Lambda常用场景


JDK8新特性

        官网提供网址:JDK 8 Features


2.Lambda表达式

思维导图

2.1 什么是Lambda表达式

        Lamdba是一个匿名函数,可以把Lamdba表达式理解为是一段可以传递的代码。使用它可以写出更简洁、灵活的代码。作为一种更紧凑风格,使Java语言表达能力得到提升

2.2 为什么使用Lamdba表达式

       更加简洁的编写方式


2.3 Lambda表达式基本语法

(参数类型 参数名称,...) -> {
        代码体;
        [return 值;]
    }

        (参数类型 参数名称,...) : 指定了Lambda表达式所需要的参数列表

        { }:指定了Lambda体,是抽象方法的实现逻辑,Lambda表达式要执行的功能

        ->:Lambda操作符,箭头操作符,分隔参数列表和Lambda体

2.4 类型推断

        Lambda表达式中的参数类型都是由编译器推断得出,Lambda表达式中无需指定类型,程序依然可以翻译。

        因为Javac会根据程序的上下文环境,在后台推断出参数类型,这就是“类型推断

2.5 Lambda练习

案例1:

interface Fiyable {
    void flying();
}

public class LambdaExpressionNoArg {
    public static void main(String[] args) {
        fly(new Fiyable() {
            @Override
            public void flying() {
                System.out.println("I can fly");
            }
        });

        //1.无参无返回值
        fly(() ->{
                System.out.println("I can fly");

        });
    }

    public static void fly(Fiyable f) {
        f.flying();
    }
}

运行结果:

如何使用Lambda表达式:

案例2:

interface Sayable{
    void say(String name);
}
public class LambdaExpressionOneArg {

    public static void main(String[] args) {
        talk(new Sayable() {
            @Override
            public void say(String name) {
                System.out.println("name:" + name);
            }
        });
        //2.一个参无返回值
        talk((String name) ->{
                System.out.println("name:" + name);
        });
        //3.数据类型可以省略
        talk(( name) ->{
            System.out.println("name:" + name);
        });
        //4.只有一个参数,括号可以省略
        talk( name ->{
            System.out.println("name:" + name);
        });
        //5,如果Lambda体只有一条语句,{}; 可以省略
        talk( name -> System.out.println("name:" + name));
    }

    public static void talk(Sayable sayable) {
        sayable.say("张三");
    }
}

 运行结果:

2.6 Lambda常用场景

        排序场景、

        如果一个对象是函数式接口的实例,那么该对象就可以用Lambda表达式,用匿名实现类表示的地方都可以用Lambda表达式替换

案例3:

先定义一个Person类

/**
 * 对这个对象进行,按照年纪排序
 */
public class Person {
    private String name;
    private int age;
    private int height;

    public Person(String name, int age, int height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", height=" + height +
                '}';
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public int getHeight() {
        return height;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setHeight(int height) {
        this.height = height;
    }
}

在写一个LambdaExpressionExercise类,完成对Person对象,进行按照年龄排序

public class LambdaExpressionExercise {

    public static void main(String[] args) {

        List<Person> persons = new ArrayList<>();

        persons.add(new Person("张三",20,170));
        persons.add(new Person("李四",19,170));
        persons.add(new Person("王五",18,170));

//        Collections.sort(persons, new Comparator<Person>() {
//            @Override
//            public int compare(Person o1, Person o2) {
//                return o1.getAge()-o2.getAge();
//            }
//        });

        Collections.sort(persons, (o1, o2) -> o1.getAge()-o2.getAge());

        for (Person person : persons) {
            System.out.println(person.toString());
        }
    }
}

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值