Java学习笔记---Lambda 表达式(简洁优雅的生产力)

参考:《Java核心技术》与大神博客

Lambda表达式的作用就是将一块代码块赋给一个Java变量 ,在jdk8之前是没有Lambda表达式的。Lambda表达式的最主要作用就是让代码更加的整洁。所有的Lambda的类型都是一个接口,而Lambda表达式本身就是这个接口的实现。

一、Lanbda表达式对接口要求

Lambda规定接口中只有一个需要被实现的方法,不是规定接口中只有一个方法

jdk8 中有一个新特性,default,被default修饰过的方法会有默认实现,不是必须被实现的方法,所以不影响Lambda表达式的使用
@Functionallnterface 函数式接口,使用了@Functionallnterface的接口将不能在添加其他抽象方法,与Lambda配套使用

二、基本语法

public interface NoReturnMutilParam {
	void menthod(int a , int b);
}
public interface NoReturnOneParam {
	void menthod(int a);
}
public interface NoReturnNoParam {
	void menthod();
}
public interface ReturnNoParam {
	int menthod();
}
public interface ReturnOneParam {
	int menthod(int a);
}

先给出上面6个接口,其中都有menthod方法,但是返回类型,和参数列表不同,下面看不使用Lambda表达式时要使用这个接口的menthod方法代码

public class LambdaTest implements NoReturnMutilParam {
	@Override
	public void menthod(int a , int b) {
		System.out.println("NoReturnMutilParam" + " " + a + " " + b);
	}
	public static void main(String[] agrs){
		LambdaTest t = new LambdaTest();
		t.menthod(3, 4);
	}
}

如果使用Lambda表达式,要达到同样的效果只需要几行代码

NoReturnMutilParam noreturnmutilparam = (int a , int b) -> {
			System.out.println("NoReturnMutilParam" + " " + a + " " + b);
		};
		noreturnmutilparam.menthod(3, 4);

下面看Lambda的语法,语法形式为 () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,->为Lambda表达式运算符。

NoReturnMutilParam noreturnmutilparam = (int a , int b) -> {
			System.out.println("NoReturnMutilParam" + " " + a + " " + b);
		};
		noreturnmutilparam.menthod(3, 4);
		
NoReturnNoParam noreturnnoparam = ()->{
			System.out.println("NoReturnNoParam");
		};
		noreturnnoparam.menthod();
	
ReturnOneParam returnoneparam = (int a) -> {
			System.out.print("ReturnOneoaram");
			return a;
		};
		System.out.println(" " + returnoneparam.menthod(3));

三、语法简化

//Lambda语法简化
	//①简化参数类型,但是必须所有参数都不写
		NoReturnMutilParam lambda1 = (a ,b) -> {
			System.out.println("lambda1" + " " + a + " " + b);
		};
		lambda1.menthod(0, 1);

		//②如果只有一个参数,可以简化参数小括号( )
		NoReturnOneParam lambda2 = a -> {
			System.out.println("lambda2" + " " + a);
		};
		lambda2.menthod(2);
		
		//如果方法体只有一条语句,简化{ }
		NoReturnOneParam lambda3 = a -> System.out.println("lambda3" + " " + a);
		lambda3.menthod(3);
		
		//如果方法体只有1条语句,并且这条语句是return 语句,可以省略return和{ }
		ReturnOneParam lambda4 = a -> a+3;
		System.out.println("lambda4 " + lambda4.menthod(4));

四、例子

(一)String 数组排序,String是对象,其中有Comparable接口,实现了compareTo方法,所以可以直接使用Arrays类中的sort排序,但是使用的是默认的字典顺序排序。如果我要使用按长度排序,可以向sort方法传入一个Comparator对象。

class lengthComparator implements Comparator<String>{
	@Override
	public int compare(String s1 , String s2) {
		return s1.length() - s2.length();
	}
}
public class LambdaTest{
	String[] str = new String[]{"hello" , "world" ,"test" , "lambda"};
	Arrays.sort(str , new lengthComparator());
		for(int i = 0;i<=3;i++) {
			System.out.println(str[i]);
		}	
	}
}

使用Lambda表达式

Arrays.sort(str , (String s1 , String s2) -> s1.length() - s2.length());
发布了40 篇原创文章 · 获赞 9 · 访问量 3286

猜你喜欢

转载自blog.csdn.net/weixin_44706647/article/details/102761652
今日推荐