【Java】新特性之Lambda表达式

本文详细介绍了Java中的Lambda表达式和方法引用,包括它们的语法、如何使用以及与函数式接口的关系。同时,文章还展示了不同类型的Lambda表达式和方法引用的四种形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

Lambda表达式

语法:

方法引用


Lambda表达式

要想使用函数式编程:接口必须只有一个方法,如果存在两个以上的方法,无法使用函数式编程

interface Add{
    void add(int x,int y);
}
public class Test{
    public static void main(String[] args){
        Add add = (x,y) -> System.out.println(x+y);
        //Lambda表达式
        Add add1 = (x,y) -> System.out.println(x+10+y);
        add.add(10,5);
        add1.add(15,10);
    }
}

如果现在某个接口就是为了函数式编程而生的,在定义时只能存在一个方法,因此有一个新的注解@Funcationallnterface,次注解会检查该接口中是否只存在一个抽象方法,存在两个抽象方法以上编译报错。

@FunctionalInterface
interface IMessage{
    void print();
}

语法:

  • 方法体只有一行代码时

(方法参数) —> 具体的方法体实现
  • 当方法有返回值时,单行代码的lambda表达式可以省略return语句
@FunctionalInterface
interface IMessage{
    void print();
}
@FunctionalInterface
interface IAdd{
    int add(int x,int y);
}
public class Test{
    public static void main(String[] args) {
        IMessage msg = () -> System.out.println("helloworld");
        msg.print();
        IAdd add = (p1,p2) -> p1+p2;
        System.out.println(add.add(10,20));
    }
}
  • 当方法体有多行代码时
(方法参数)->{
    ....
    ....
    ...
    [return 语句];
  };
public class Test{
    public static void main(String[] args) {
        IAdd add = (p1,p2) ->{
            int result = p1+p2;
            result+=20;
            return result;
        };
        System.out.println(add.add(10,20));
    }
}

方法引用

——与Lambda表达式搭配使用

方法引用的四种形式:

  • 引用类中静态方法
类名称 :: 静态方法名称
public class Test{
    public static void main(String[] args) {
        IUtil<Integer,String> util =
                String :: valueOf;
        //相当于调用String.valueOf(10);
        String str = util.switchPara(10);
        System.out.println(str.startsWith("1"));
    }
}
  • 引用某个对象的方法
实例化对象 :: 普通方法
public class Test{
    public static void main(String[] args) {
        IUtil<String> util =
                "hello" :: toUpperCase;
        //相当于调用了"hello".toUpperCase();
        System.out.println(util.switchPara());
    }
}
  • 调用类中普通方法
类名称 :: 通方法名
public class Test{
    public static void main(String[] args) {
        IUtil<Integer,String> util =
                String :: compareTo;
        System.out.println(util.compare("刘","张"));
    }
}
  • 引用类中的构造方法
类名称 :: new
public class Test{
    public static void main(String[] args) {
        IUtil<Person,String,Integer> util =
                Person::new;
        System.out.println(util.createPer("张",10));
    }
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值