Java JDK1.8函数接口

Lambda最最最重要口诀:拷贝小括号 , 写死右箭头 , 落地大括号
Lambda表达式是给函数式接口的形参或变量赋值用的一段代码


@FunctionalInterface //隐身修饰,取消可以有多个抽象方法,加上只能有一个
interface Function{
    //函数接口里必须有一个抽象方法
    void fun(int x,int y,int z);
    
    //可以有多个default修饰的方法
    default int add2(int x,int y){
        System.out.println(  add3(5,6));
        return x + y;
    }
    //静态方法只能用于类之间调用,其它类不能调用
    static int add3(int x,int y){
        return x + y;
    }

    default void add4(int x){
        for (int i = 0; x < 10;x++){
            System.out.println("打印;"+x);
        }

    }
}

/**
 * 1.8接口:1.函数接口@FunctionalInterface 
 *         2.static静态方法
 *         3.default修饰的方法
 *         4.表达式
 *  拷贝小括号 , 写死右箭头 , 落地大括号
 */
 class Test {
    public static void main(String[] args) {
        Function function = (x,y,z) -> {};  //这里的参数对应抽象方法
        System.out.println(function.add2(5,8));  //调用方法
        function.add4(3);   
        

Lambda细节操作

import java.util.TreeSet;

class User{
    private  Integer id;
    private  Integer age;
    private  String name;

    public User(Integer id, Integer age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}
/**
 *  Lambda 表达式是给函数式接口的形参或变量赋值用的(是一段代码)
 *  必须是给这个函数式接口的抽象方法传代码复用的
 *
 *  格式: (形参)->{lambda方法体}
 *   形参列表就是函数接口的抽象方法的形参列表
 *   方法体就是函数式接口的抽象方法的方法体
 *
 */
class Test {
    public static void main(String[] args) {
        //按照年龄从低到高
        TreeSet<User> user = new TreeSet<>((o1, o2) -> Double.compare(o1.getAge(),o2.getAge()));
        user.add(new User(1,79,"李元霸"));
        user.add(new User(2,23,"李元"));
        for(User user1 :user){
            System.out.println(user1);
        }

    }
}
User{id=2, age=23, name='李元'}
User{id=1, age=79, name='李元霸'}

细节说明

1.当(形参)是空参,那么()是不能省略
2.当(形参)是有参,类型可以确定,形参的数据类型可以省略
3.当(形参)有参,并且只有一个形参,类型和()都可以省略
4.{lambda方法体}有多个语句,每句语句都要;结束
5.{lambda方法体}只有一个语句,{} 和 ; 可以同时省略
6.如果函数接口的抽象方法的返回值类型不是void,那么{lambda方法体}里面要有return返回值语句
如果{lambda方法体}中只有一个{return 返回值;}语句时,次时{} ; return关键字这三样都可以同时省略
7.形参名可以根据自己定义

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java语录精选

你的鼓励是我坚持下去的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值