通过阅读本文可以让你快速掌握Lambda的基本用法
引入背景:在jdk不断升级的过程中,为了让很长串的代码变得更加简洁,因此引入Lambda。它用简单扼要的语法来表达某种功能所包含的操作。在程序遍历访问集合中元素的场合,运用Lambda表达式可以打打简化操纵集合的程序代码。
先来一个简单的用Lambda用法输出"hello world!"
1、普通写法
public class csdn_lambda {
public static void main(String[] args) {
new Runnable() {
public void run() {
System.out.println("hello wrold!");
}
}.run();
}
}
2、Lambda写法
public class csdn_lambda {
public static void main(String[] args) {
Runnable runnable = ()-> System.out.println("hello world!");
runnable.run();
}
}
通过对比我们会发现lambda表达式大大简化了代码。初学者看肯定是一头雾水,其实与看,上面的lambda函数中由两个部分组成:接口类型+函数实现
接口类型:Runnable runnable 它是一个Runnable接口类型实例
函数实现: ()-> System.out.println(“hello world!”);
重点就是看Lambda表达式是怎么实现函数了
在这个案例中,Runnable接口中有一个run()方法
public abstract void run(); //Runnable中的抽象方法
重点:所以说()其实就是代表run中的参数,这里run没有定义参数,括号里也就什么都不用加。System.out.println(“hello world!”);就是在run函数中的实现内容。
让我们看看有参数的情况下,lambda表达式是怎么写的
/*
* 方法中含有参数,并且有返回类型,但是,多行语句
* */
class Test002{
public static void main(String[] args) {
//实现lmabda函数
Dao dao = (x,y)->x+y;
int result = dao.sum(1, 2);
System.out.println("结果:"+result);
}
interface Dao {
int sum(int i, int n);
}
}
(x,y)->x+y;
(x,y)中x和y就是sum函数的两个参数了
x+y;是sum函数中的实现部分,sum函数直接返回了x+y的值
总结:Lambda表达式的基本语法为:
(Type1 param1,Type2 param2,...,TypeN paramN)->{
statment1;
statment2;
//..
return statmentM;
}
(1)当Lambda表达式的参数个数只有一个时,可以省略小括号,例:
name->{
System.out.println(name);
return;
}
(2)当Lambda表达式只包含一条语句时,可以省略大括号、语句结尾的分号。此外,当return语句没有返回值时也可以省略。
name->System.out.println(name)
public class csdn_lambda {
public static void main(String[] args) {
ArrayList<Person2> list = new ArrayList<>();
list.add(new Person2("tom",12));
list.add(new Person2("candy",10));
list.forEach(System.out::println);
}
}
重写了toString()方法,输出:
Person2{name='tom', age=12}
Person2{name='candy', age=10}
/*
* 自定义排序
* */
class Test003{
public static void main(String[] args) {
//使用函数进行自定义排序
Comparator<Integer> comparab =(x, y)->y-x; //<0升序 >0降序 =0不变
//创建可以排序的集合
TreeSet<Integer> set = new TreeSet<>(comparab);
set.add(3);
set.add(10);
set.add(50);
System.out.println(set);
}
}
Comparator是一个自定义比较器,通过返回的数来判断升序还是降序还是不改变
(x, y)->y-x 重新实现了int compare(T o1, T o2);方法,返回值是y-x