Java8新特性——1.2,Lambda基础语法
为了节省不必要的时间,我用了部分截图来说,
一,
package com.atTest.java8;
public interface Mypredicate<T> {
public boolean test(T t);
}
因为接口的抽象方法会有几种情况,有参,无参,或多个参数,或者说有的方法有返回值有的方法没返回值。
以下我就将各种情况一一列举,请大家耐心看下去,其实很简单的,
语法格式一:无参无返回值。
()- > system.out.println(“Hello,Lambda”)
@Test
public void test() {
//final int num = 0;
int num = 0;//jdk1.7以前必须final,jdk1.8之后就不用再final
Runnable runnable = new Runnable() {
//匿名内部类
@Override
public void run() {
System.out.println("Hello,Lambda"+num);
}
};
runnable.run();
System.out.println("----------------------------");
//Lambda表达式
Runnable runnable01 = () -> System.out.println("Hello,Lambda"+num);
runnable01.run();
}
语法格式二:有一个参数,无返回值。
(x) ->System.out.println(x);
@Test
public void test01() {
Consumer<String> consumer = (x) ->System.out.println(x);//lambda表达式实现接口,
consumer.accept("Lambda一点也不难");
}
语法格式三:若只有一个参数,()可以省略不写
x ->System.out.println(x);
语法格式四:有两个以上的参数,有返回值,并且Lambda体中有多条语句
@Test
public void test02() {
Comparator<Integer> comparator = (x,y) -> {//lambda体有多个语句必须使用{}
System.out.println("函数式接口");
return Integer.compare(x, y);
};
}
语法格式五:有两个以上的参数,有返回值,Lambda体中有一条语句
//{}和return可以省略不写
@Test
public void test03() {
Comparator<Integer> comparator = (x,y) -> Integer.compare(x, y);
}
语法格式六:Lambda表达式的参数类型可以省略不写,因为JVM编译器可以通过上下文推断出数据类型,即“类型推断”,
(Integer x,Integer y) -> Integer.compare(Integer x,Integer y);
(x,y) -> Integer.compare(x, y);//如果要写就要全部带上数据类型
例如:
对这六中语法格式进行一个小总结:
上联:左右遇一括号省
下联:左侧推断类型省
横批:能省则省
return还没编进去,大家有想法的可以评论留言一下,
二,Lambda表达式需要“函数式接口”的支持
函数式接口:接口中只有一个方法的接口,称为“函数式接口”
public interface Mypredicate<T> {
public boolean test(T t);
}
怎么判断是否为函数式接口?
:我们可以加一个注解修饰一下来判断
@FunctionalInterface
public interface Mypredicate<T> {
public boolean test(T t);
}
被@FunctionalInterface修饰的接口必须只有一个抽象方法
看了这么多,必须带整一个例子来看看
需求:对一个数进行运算。
创建一个接口:
@FunctionalInterface
public interface MyFun {//带不带泛型都行
public Integer getValue(Integer num);
}
需求:对一个数进行运算
@Test
public void test04() {
Integer num = operation(100, (x) -> x * x );//对100进行平方
System.out.println(num);
System.out.println(operation(200, (y)-> y + y ));//200+200
}
public Integer operation(Integer num,MyFun mf) {
return mf.getValue(num);
}
建议大家实际操作一遍因为这样会记得更牢固,
上一篇: Java——Stream流API(一)
下一篇: Reactor学习