欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java8新特性——1.2,Lambda基础语法

程序员文章站 2022-05-22 20:34:52
...

为了节省不必要的时间,我用了部分截图来说,

一,

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);

Java8新特性——1.2,Lambda基础语法

	@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);//如果要写就要全部带上数据类型
例如:
Java8新特性——1.2,Lambda基础语法

对这六中语法格式进行一个小总结:
上联:左右遇一括号省
下联:左侧推断类型省
横批:能省则省

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);
	
}

建议大家实际操作一遍因为这样会记得更牢固,

相关标签: # Java8新特性