携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情
什么是 Lambda 表达式
在普遍的编程语言中,Lambda 表达式(或函数)是匿名函数。例如,一个函数没有任何名称或者标识符,但却带有一些参数与方法体。一个箭头(->)用于分隔参数列表和正文。
在 Java 中,Lambda 表达式是表示
函数接口实例的表达式。
类似于 Java 中的其他类型,Lambda 表达式也有类型,它们的类型是功能接口类型。可以在编辑器中Lambda 表达式左侧查看其类型。
Lambda 函数接口中只能存在一个抽象方法,存在多个会编译失败
不过该接口也可以声明 java.lang.Object 类中的抽象方法,但该接口仍然可以被称为函数接口。
如图所示:
带参数的函数接口
例如: (a,b) -> { return a+""+b; }
@FunctionalInterface
interface ParmsInterface {
String ab(int a, int b);
}
public class LambdaDemo1 {
public static void main(String[] args) {
ParmsInterface parmsInterface = (a, b) -> a + "KFC crazy Thursday." + b;
System.out.println(parmsInterface.ab(10, 20));
}
}
输出:
10KFC crazy Thursday.20
使用 Lambda 来遍历集合
使用 Lambda 来遍历 List 集合:
List<String> list = new ArrayList<String>() {{
add("Kim");
add("Jimmy");
add("Sol");
}};
list.forEach(s -> {
System.out.println(s);
});
tips:不要再 foreach 中执行
remove方法
使用 Lambda 来遍历 Map 集合:
Map<String, Integer> map = new HashMap<String, Integer>() {{
put("kim", 23);
put("Jimmy", 25);
put("Sol", 26);
}};
map.forEach((k, v) -> {
System.out.println("姓名: " + k + ",年龄: " + v + " 岁.");
});
输出:
姓名: Sol,年龄: 26 岁.
姓名: kim,年龄: 23 岁.
姓名: Jimmy,年龄: 25 岁.
过滤集合数据
如下案例,展示了在过滤器集合数据中使用 Lambda 表达式。
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class LambdaFilter {
public static void main(String[] args) {
List<Staff> staffList = new ArrayList<>();
staffList.add(new Staff("张三", 10000));
staffList.add(new Staff("李四", 20000));
staffList.add(new Staff("王二", 30000));
staffList.add(new Staff("马五", 40000));
staffList.add(new Staff("罗六", 2000));
List<Staff> staffFilter = staffList.stream()
.filter(s -> s.getWage() >= 20000)
.collect(Collectors.toList());
staffFilter.forEach(System.out::println);
}
@Data
public static class Staff {
private String name;
private int wage;
public Staff(String name, int wage) {
this.name = name;
this.wage = wage;
}
}
}
输出:
LambdaFilter.Staff(name=李四, wage=20000)
LambdaFilter.Staff(name=王二, wage=30000)
LambdaFilter.Staff(name=马五, wage=40000)
主要的代码如下:
List<Staff> staffFilter = staffList.stream()
.filter(s -> s.getWage() >= 20000)
.collect(Collectors.toList());
staffList.stream() : 把 List 集合放进流中进行处理
filter: 根据表达式中的条件进行过滤
collect: 取流过滤后的结果重新整合为 List 新的集合