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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值