一、lambda表示式的含義
Lambda 表示式是 Java 8 引入的一種簡潔的語法,用於表示匿名函式或傳遞行為。它使得我們可以更簡潔地表達程式碼中的行為和函式邏輯,特別是在使用函式式介面時(如 Consumer
二、基本的寫法
interface Inter1 {
void fun1();
}
interface Inter2 {
void fun1(String s);
}
interface Inter3 {
String fun1(String s1, String s2);
}
public class LambdaDemo {
public static void main(String[] args) {
/**
* 場景1
*/
//無引數,無返回值
// show1(()->{
// System.out.println("好好學習,天天向上!");
// });
// 如果方法邏輯體只有一行的時候,可以將大括號省略
// show1(()-> System.out.println("好好學習,天天向上!"));
/**
* 場景2
*/
// 有一個引數,無返回值
// show2((String s)->{
// System.out.println(s+": 江川");
// });
// 左邊的引數型別可以省略不寫, jvm會做自動型別上下文推斷
// show2((s) -> System.out.println(s + ": 江川"));
// 若只有一個引數,小括號可以省略不寫
// show2(s -> System.out.println(s + ": 江川"));
/**
* 場景3
*/
//有兩個以上的引數,有返回值,並且 Lambda 體中有多條語句
// show3((String s1,String s2)->{
// return s1+"-數加-"+s2;
// });
// 若Lambda 體中只有一條語句,return和大括號都可以省略不寫
// show3((s1, s2) -> s1 + "-數加-" + s2);
}
public static void show3(Inter3 inter3) {
System.out.println(inter3.fun1("hello", "world"));
}
public static void show2(Inter2 inter2) {
inter2.fun1("hello");
}
public static void show1(Inter1 inter1) {
inter1.fun1();
}
}
三、具體例項
1.先建立一個Staff類,裡面有基本的成員
public class Staff {
private String id;
private String name;
private int age;
private int salary;
public Staff() {
}
public Staff(String id, String name, int age, int salary) {
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Staff{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
'}';
}
}
2.進行測試使用lambda表示式
1.Staff類同上,這裡就不重複寫了
2.編寫介面
public interface FilterStaff {
boolean fun(Staff staff);
}
3.案例
import java.util.ArrayList;
import java.util.List;
public class StaffDemo1 {
public static void main(String[] args) {
ArrayList<Staff> list1 = new ArrayList<>();
list1.add(new Staff("sj1001","彭于晏",23,30000));
list1.add(new Staff("sj1002","吳彥祖",13,10000));
list1.add(new Staff("sj1003","胡歌",21,24000));
list1.add(new Staff("sj1004","章若楠",18,26000));
list1.add(new Staff("sj1005","楊冪",26,35000));
//需求:過濾出薪資大於20000的人的資訊
List<Staff> list2= FilterWithCollection(list1,s-> s.getSalary()>20000);
for (Staff staff : list2) {
System.out.println(staff);
}
}
public static List<Staff> FilterWithCollection(List<Staff> staff,FilterStaff filterStaff){
ArrayList<Staff> staff1 = new ArrayList<>();
for (Staff staff2 : staff) {
if(filterStaff.fun(staff2)){
staff1.add(staff2);
}
}
return staff1;
}
}