Lambda 表达式的基础语法 : Java8 中引入了一个新的操作符 “->
”, 该操作符称为箭头操作符或 Lambda 操作符,箭头操作符将 Lambda 表达式拆分成两部分 :
左侧 : Lambda 表达式的参数列表;
右侧 : Lambda 表达式中所需执行的功能, 即 Lambda 体;
基本语法:
(parameters) ->
expression
或
(parameters) ->
{ statements; }
常用示例:
1.forEach遍历List集合
String[] names = {"喵","汪","咩"};
List nameList = Arrays.asList(names);
// 旧的循环方式
for (String name : nameList) {
System.out.print(name + "; ");
}
// 使用 lambda 表达式
nameList.forEach((item) -> System.out.print(item + " "));
2.Stream用法
(1).filter过滤
List users = users.stream()
.filter(user -> "小喵咪".equals(user.getName()))
.collect(Collectors.toList());
(2).map处理
List nums = Arrays.asList(100, 200, 300, 400, 500);
for (Integer num : nums) {
num = num + 12;
System.out.println(num);
}
// 使用 lambda 表达式
List nums = Arrays.asList(100, 200, 300, 400, 500);
nums.stream().map((num) -> num = num + 12)
.forEach(System.out::println);
3.使用Lambda排序集合
String[] names = {"喵","汪","咩"};
// 使用匿名内部类排序
Arrays.sort(names, new Comparator() {
@Override
public int compare(String s1, String s2) {
return (s1.compareTo(s2));
}
});
// 使用lambda表达式
Arrays.sort(names, (String s1, String s2) -> (s1.compareTo(s2)));
4.返回不同类型的处理结果
//返回String
String str = userList.stream()
.filter(user -> "喵".equals(user.getName()))
.collect(Collectors.joining(","));
//返回Set
Set names = userList.stream()
.filter(user -> "喵".equals(user.getName()))
.collect(Collectors.toSet());
//返回TreeSet
TreeSet names = userList.stream()
.filter(user -> "喵".equals(user.getName()))
.collect(Collectors.toCollection(TreeSet::new));
5.实现多线程接口
//使用Thread匿名内部类
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello world!");
}
}).start();
//使用lambda表达式
new Thread(() -> System.out.println("Hello world!")).start();
//使用Runnable匿名内部类
Runnable race1 = new Runnable() {
@Override
public void run() {
System.out.println("Hello world!");
}
};
//使用lambda表达式
Runnable race2 = () -> System.out.println("Hello world!");
注意事项:
1.lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义);
2.在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量。