0
点赞
收藏
分享

微信扫一扫

Java8 Lambda表达式

吴陆奇 2022-03-11 阅读 170


Lambda 表达式,也可称为闭包,Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中),使用 Lambda 表达式可以使代码变的更加简洁紧凑,Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。

虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能,建议不要乱用,因为在某些情况下不利于维护。

语法

(parameters) -> expression

(parameters) ->{ statements; }

Lambda 表达式的重要特征:


  • 可选类型声明:​不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:​一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:​如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:​如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

Lambda 表达式使用注意事项:


  • Lambda 表达式主要用来定义行内执行的方法类型接口,例如,一个简单方法接口。
  • Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。

简单样例 

1、实现Runnable线程

public class LambdaDemo {

public static void main(String[] args) {
// TODO Auto-generated method stub

//方式一:匿名内部类实现
Runnable runTest = new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub

for(int i = 0; i < 10; i++) {
System.out.println("结果是:"+i);
Thread.yield();
}


}
};

//方式二:Lambda表达式实现
Runnable runTest2 = ()->{
for(int i = 10; i < 20; i++) {
System.out.println("结果是:"+i);
Thread.yield();
}
};


Thread t1 = new Thread(runTest);
Thread t2 = new Thread(runTest2);
t1.start();
t2.start();

//方式三:Lambda表达式更为简单的实现
new Thread(()->{
for(int i = 20; i < 30; i++) {
System.out.println("结果是:"+i);
Thread.yield();
}
}).start();;

}

}

2、普通无参数Lambda表达式实现

//定义一个接口
public interface PersonInterface {

public void speak();


}
//方法体

public class Person {

public static void main(String[] args) {
// TODO Auto-generated method stub

PersonInterface per = ()->{

System.out.println("这是通过Lambda表达式实现PersonInterface接口");
};
per.speak();//很重要,要不然没有输出结果

}

}

3、普通有参数Lambda表达式实现

//定义一个接口
public interface PersonInterface {

public void speak(String str);


}
//方法体
public class Person {

public static void main(String[] args) {
// TODO Auto-generated method stub

PersonInterface per = (String str)->{

System.out.println("这是通过Lambda表达式实现PersonInterface接口"+str);
};
per.speak("\n实现成功");
}

}

4、实现事件处理

import java.awt.*;
import javax.swing.*;
public class Person {

public static void main(String[] args) {
// TODO Auto-generated method stub

JButton button = new JButton();
button.addActionListener((e)->{
System.out.println("这是一个Lambda表达式按实现的监听器");
});
}
}

5、实现集合的遍历

import java.util.*;
public class Person {

public static void main(String[] args) {
// TODO Auto-generated method stub

List<Integer> aList = new ArrayList<Integer>();
aList.add(1);
aList.add(2);
aList.add(3);
aList.add(4);
aList.add(5);

aList.forEach((n)->{
System.out.println("通过Lambda表达式实现List集合遍历,该数是:"+n);
});
}
}

6、简单实现排序

import java.util.*;
import java.math.*;
public class Person {

public static void main(String[] args) {
// TODO Auto-generated method stub

String[] players = {"Rafael Nadal", "Novak Djokovic",
"Stanislas Wawrinka", "David Ferrer",
"Roger Federer", "Andy Murray",
"Tomas Berdych", "Juan Martin Del Potro",
"Richard Gasquet", "John Isner"};
//方式一:
Comparator<String> sortByName = (String s1, String s2) -> (s1.compareTo(s2));
Arrays.sort(players, sortByName);

//方式二:
Arrays.sort(players, (String s1, String s2) -> (s1.compareTo(s2)));

for(String str:players) {
System.out.println(str);
}
}
}



举报

相关推荐

0 条评论