java基础学习之Lambda表达式

Lambda表达式的标准格式:

由三部分组成:
a. 一些参数
b. 一个箭头
c. 一段代码

格式:
(参数列表)->{一些重写方法的代码的};

解释说明格式:
():接口中抽象方法的参数列表,没有参数,就空着;有参数就写出参数,多个参数使用逗号分隔

->:传递的意思,把参数传递给方法体{}

{} : 重写接口的抽象方法的方法体

感觉这个lambda表达式就是专门为了简化匿名内部类而存在。

例子1:

public interface Caculator {
    public abstract int cacl(int a,int b);
}

public class DemoMain {
    public static void main(String[] args) {
        DemoMain d = new DemoMain();
        int q = d.getCalc(10, 20, new Caculator() {
            @Override
            public int cacl(int a, int b) {
                return a + b;
            }
        });
        System.out.println(q);

        int p = d.getCalc(120, 140, (int a, int b) -> {
            return a + b;
        });
        System.out.println(p);

    }

    public int getCalc(int a,int b,Caculator calc){
        int sum = calc.cacl(a,b);
        return sum;
    }
}

例子2:

public class Person{
    private String name;
    private int age;

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

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

public class demotest {
    public static void main(String[] args) {
        Person[] arr = new Person[]{new Person("小明",18),
                new Person("小红 ",19),new Person("小黑",17)};
//        Arrays.sort(arr, new Comparator<Person>() {
//            @Override
//            public int compare(Person o1, Person o2) {
//                return o1.getAge() -  o2.getAge();//前面减后面实现升序
//            }
//        });
        Arrays.sort(arr,(Person o1, Person o2)->{
            return o1.getAge() -  o2.getAge();//前面减后面实现升序
        });
        for (Person person : arr) {
            System.out.println(person);
        }
    }
}

Lambda表达式的省略格式

这里这里有一个参考原则:
可推导即可省略

Lambda表达式强调的是做什么而不是怎么做,所以凡是可以根据上下文推导得知的信息,都可以省略。

省略规则
在Lambda标准格式的基础上,使用省略写法的规则为:
1、 小括号内参数的类型可以省略;
2、如果小括号内有且仅有一个参数,则小括号可以省略;
3、如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字和语句分号等。

Lambda的使用前提

Lambda的语法非常简洁,完全没有面向对象复杂的束缚,但是使用时有几个问题需要特别注意:

1、使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。
无论是JDK内置的Runnable、Comparator接口还是自定义的接口,只有当接口中的抽象方法唯一存在且唯一时,才可以使用Lambda.

2、使用Lambda必须具有上下文推断。
也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为改接口的实例。

Arrays.sort(arr,(o1,o2)->o1.getAge()-o2.getAge());

int p = d.getCalc(120, 140, (a,b) ->a + b);

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值