Java8新特性之Lambda表达式的语法是什么
这篇文章主要介绍了Java8新特性之Lambda表达式的语法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java8新特性之Lambda表达式的语法是什么文章都会有所收获,下面我们一起来看看吧。
陆河网站建设公司创新互联建站,陆河网站设计制作,有大型网站制作公司丰富经验。已为陆河数千家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的陆河做网站的公司定做!
#Lambd表达式 Lambda表达式是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码 像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。 ##1. 格式 '->' :lambda操作符或箭头操作符 '->'的左边: Lambda形参列表(其实就是接口中的抽象方法的形参列表) '->'的右边: Lambda体 (其实就是 重写的抽象方法的方法体) ##2. Lambda表达式的使用 Lambda表达式的使用为了方便理解,分为6种情况介绍,通过内置函数式接口来举例,也可以对比匿名函数来理解。
语法格式一:无参,无返回值,Lambda体只需一条语句
Runnable r2 = ()->{ System.out.println("Test1"); };
语法格式二:Lambda需要一个参数,并且无返回值
Consumercon2 = (String s)->{ System.out.println(s); }; con2.accept("test2");
语法格式三:Lambda只需要一个参数时,参数的小括号可以省略,同时省略参数变量类型(类型推断)
Consumercon2 = s->{ System.out.println(s); }; con2.accept("test2");
语法格式四:Lambda需要两个参数,并且有返回值
Comparatorcom2 = (Integer o1,Integer o2) -> { return o1.compareTo(o2); };
语法格式五:当 Lambda 体只有一条语句时,return 与大括号可以省略
Comparatorcom2 = (Integer o1,Integer o2) -> o1.compareTo(o2);
语法格式五:数据类型可以省 略,因为可由编译器推断得出, 称为“类型推断
// 数据类型可以省略,因为可由编 译器推断得出, 称为“类型推断 Comparatorcom2 = (o1,o2) -> o1.compareTo(o2);
上述 Lambda 表达式中的参数类型都是由编译器推断得出的。Lambda 表达式中无需指定类型,程序依然可以编译,这是因为 javac 根据程序的上下文,在后台推断出了参数的类型。Lambda 表达式的类型依赖于上下文环境,是由编译器推断出来的。这就是所谓的“类型推断” ##3. 函数式接口 ###3.1 什么是函数式接口 只包含一个抽象方法的接口,称为函数式接口。 你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)。Lambda表达式也是依赖于函数式接口的。 我们可以在任意函数式接口上使用 @FunctionalInterface 注解, 这样做可以检查它是否是一个函数式接口,同时javadoc也会包含一条声明,说明这个接口是一个函数式接口。 ###3.2 如何理解函数式接口 1.Java从诞生口起就是一直倡导“一切皆对象”,在Java里面面向对象(OOP)编程是一切。但是随着python、 scala等语言的兴起和新技术的挑战,Java不得不做出调整以便支持更加广泛的技术要求,也即Java不但可以支持OOP还可以支持OOF(面向函数编程) 2.在函数式编程语言当中,函数被当做一等公民对待。在将函数作为一等公民的编程语言中,Lambda表达式的类型是函数。但是在Java8中,有所不同。在Java8中,Lambda表达式是对象,而不是函数,它们必须依附于一类特别的对象类型-函数式接口。 3.简单的说,在Java8中,Lambda表达式就是一个函数式接口的实例。这就是Lambda表达式和函数式接口的关系。也就是说,只要一少对象是函数式接口的实例,那么该对象就可以用Lambda表达式来表示。 所以以前用匿名实现类表示的现在都可以用Lambda表达式来写。 ###3.3 自定义函数式接口
/** 这个接口里只能写一个方法,写多个方法注解会爆红,注解的作用是验证该接口是否是函数接口 若果不写该注解,并且接口只有一个方法则该接口也是函数式接口 */ @FunctionalInterface public interface MyInterface { void method(); } //泛型写法 @FunctionalInterface public interface MyInterface{ T method(T t); }
###3.4 Java 内置四大核心函数式接口
举两个简单的例子
public void test4(){ Consume(500, new Consumer() { @Override public void accept(Integer integer) { System.out.println("消费了"+integer); } }); //lambda表达式写法 Consume(400,money-> System.out.println("赚了"+money)); } public static void Consume(int money, Consumer consumer){ consumer.accept(money); }
public void test5(){ Listlist = Arrays.asList("sss","rrr","yyyyy","ssdasds","sd"); list = predit(list, new Predicate () { @Override public boolean test(String s) { return s.length()>3; } }); System.out.println(list.toString()); //lambda表达式写法 List list1 = Arrays.asList("12","13","14","15","16","17"); list1 = predit(list1,i->Integer.parseInt(i)>14); System.out.println(list1.toString()); } public static List predit(List strings, Predicate predicate){ List list = new ArrayList<>(); for (String s:strings){ if (predicate.test(s)){ list.add(s); } } return list; }
关于“Java8新特性之Lambda表达式的语法是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Java8新特性之Lambda表达式的语法是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注创新互联行业资讯频道。
分享标题:Java8新特性之Lambda表达式的语法是什么
本文来源:http://azwzsj.com/article/iijsgp.html