Java8新特性:Lambda表达式
程序员文章站
2022-04-29 18:04:34
Lambda表达式,案例一:new Thread(() -> System.out.println("thread")); Lambda表达式,案例二:由参数/箭头和主体组成: 之前的代码形式: Comparator byWeight = new Comparator() ......
lambda表达式,案例一:new thread(() -> system.out.println("thread"));
lambda表达式,案例二:由参数/箭头和主体组成:
(apple a1, apple a2) -> a1.getweight().compareto(a2.getweight());
之前的代码形式:
comparator<apple> byweight = new comparator<apple>() {
public int compare(apple a1, apple a2) {
return a1.getweight().compareto(a2.getweight());
}
}
针对这种情形,我们怎么理解呢?其实很简单,上看一下上述lambda表达式的语法:() -> {}(): 括号就是接口方法的括号,接口方法如果有参数,也需要写参数。只有一个参数时,括号可以省略。-> : 分割左右部分的,没啥好讲的。{} : 要实现的方法体。只有一行代码时,可以不加括号,可以不写return。在控制台打印,不返回任何值(看起来像是返回void)
函数式接口就是只显式声明一个抽象方法的接口。为保证方法数量不多不少,java8提供了一个专用注解@functionalinterface
,这样,当接口中声明的抽象方法多于或少于一个时就会报错。如下图所示:
lambda表达式和函数式接口结合
步骤:
- 新建无参函数式接口(先演示无参);
- 新建包含属性为函数式接口的类;
- 实现函数式接口;
- 测试函数式接口的方法;
新建无参函数式接口
@functionalinterface public interface interfacewithnoparam { void run(); }
新建包含属性为函数式接口的类
public class testjava8{
//匿名内部类 interfacewithnoparam param1 = new interfacewithnoparam() { @override public void run() { system.out.println("通过匿名内部类实现run()"); } }; //lambda表达式 //空括号表示无参 interfacewithnoparam param = () -> system.out.println("通过lambda表达式实现run()") ; }
测试函数式接口的方法
@test public void testintfacewithnoparam() { this.param.run(); this.param1.run(); }
运行结果
其他形式的函数式接口及实现
上述内容实现了无参无返回值的函数接口与实现,当然还有其他形式:
有参无返回值
接口
@functionalinterface public interface interfacewithparams { void run(string s); }
实现
interfacewithparams params = new interfacewithparams() { @override public void run(string s) { system.out.println("通过" + s + "实现run(string)"); } }; interfacewithparams params1 = (string s) -> system.out.println("通过" + s + "实现run(string)");
测试
this.params.run("匿名类"); this.params1.run("lambda");
运行
无参有返回值
接口
@functionalinterface public interface interfaceunvoidwithnoparam { string run(); }
实现
interfaceunvoidwithnoparam interfaceunvoidwithnoparam = new interfaceunvoidwithnoparam() { @override public string run() { return "hello world!"; } }; interfaceunvoidwithnoparam interfaceunvoidwithnoparam1 = () -> "hello lambda!";
测试
string s = this.interfaceunvoidwithnoparam.run(); system.out.println("返回结果是:"+s); string s0 = this.interfaceunvoidwithnoparam1.run(); system.out.println("返回结果是:"+s0);
运行
有参有返回值
接口
@functionalinterface public interface interfaceunvoidwithparams { string run(integer integer); }
实现
interfaceunvoidwithparams interfacewithparams = new interfaceunvoidwithparams() { @override public string run(integer integer) { return string.valueof(integer); } }; interfaceunvoidwithparams interfacewithparams1 = (integer integer) -> string.valueof(integer);
测试
string s1 = this.interfacewithparams.run(1); system.out.println("您输入的是:"+s1); string s2 = this.interfacewithparams1.run(2); system.out.println("您输入的是:"+s2);