【JAVA入门】Day26 - Lambda表达式

【JAVA入门】Day26 - Lambda表达式



        Lambda表达式在代码中最常用的功能就是简化匿名内部类的书写。

Ingeger[] arr = {2, 3, 1, 5, 6, 7, 8, 4, 9};

Arrays.sort(arr, new Comparator<Integer>() {
	@Override
	public int compare(Integer o1,Integer o2) {
		return o1 - o2;
	}
});

System.out.println(Arrays.toString(arr));		//[1, 2, 3, 4, 5, 6, 7, 8, 9]

        改写为Lambda表达式的书写格式为:

Arrays.sort(arr, (Integer o1,Integer o2)->{
		return o1 - o2;
	}
);

        一个 -> 就节省了大部分的代码。

一、函数式编程

        函数式编程(Functional Programming)是一种思想特点。之前我们的面向对象的语法是:先找对象,让对象做事情。而函数式编程思想,可以忽略面向对象的复杂语法,强调做什么,而不是谁去做
        Lambda表达式是 JDK8 开始后的一种新语法形式。他的格式很简单只有三部分:

() -> {

}
  • ()对应着方法的形参
  • -> 是固定格式
  • {} 对应着方法的方法体

在这里插入图片描述

注意点:

  • Lambda 表达式可以同来简化匿名内部类的书写。
  • Lambda 表达式只能简化函数式接口的匿名内部类的写法。
  • 函数式接口:有且仅有一个抽象方法的接口叫做函数式接口,接口上方可以加 @FunctionalInterface 注解。
package Lambda;

public class LambdaTest1 {
    public static void main(String[] args) {
        //1.利用匿名内部类的形式调用下面的方法
        method(new Swim() {
            @Override
            public void swimming() {
                System.out.println("游泳");
            }
        });

        //2.利用Lambda表达式进行改写
        method(()->{
            System.out.println("游泳");
        });
    }

    public static void method(Swim s) {
        s.swimming();
    }
}
@FunctionalInterface
interface Swim{
    public abstract void swimming();
}

二、Lambda表达式的省略写法

        Lambda表达式的省略核心是:可推导,可省略。
        Lambda表达式的省略规则:

  • 1.参数类型可以省略不写。
  • 2.如果只有一个参数,参数类型可以省略,同时( )也可以省略。
  • 如果Lambda表达式的方法体只有一行,大括号、分号、return也可以省略不写,但需要同时省略。
package Lambda;

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

public class LambdaTest2 {
    public static void main(String[] args) {
        Integer[] arr = {2, 3, 1, 5, 6, 7, 8, 4, 9};

        Arrays.sort(arr, new Comparator<>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        });

        //lambda完整格式
        Arrays.sort(arr, (Integer o1, Integer o2)-> {
            return o1 - o2;
        });

        //lambda省略格式
        Arrays.sort(arr,(o1, o2) -> o1 - o2);
    }
}

【练习】Lambda表达式简化Comparator接口的匿名形式。
要求定义数组并存储一些字符串,利用 Arrays 中的 sort 方法进行排序。按照字符串长度,短的在前,长的在后。

package Lambda;

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

public class LambdaTest3 {
    public static void main(String[] args) {
        String[] arr = {"a", "aaaa", "aaa", "aa"};

        //排序
        Arrays.sort(arr, new Comparator<String>(){
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        });

        //Lambda表达式
        Arrays.sort(arr, (o1, o2)-> o1.length() - o2.length());

        System.out.println(Arrays.toString(arr));
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值