Lambda 表达式
一、基础语法
(参数列表) -> { 表达式 }
二、lambda表达式的重要特征:
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
(int a, int b) -> {
System.out.println(a+b);
}
简写为
(a,b) -> {
System.out.println(a+b);
}
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
(a) -> {
System.out.println(a);
}
简写为
a -> {
System.out.println(a);
}
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
(a,b) -> {
System.out.println(a+b);
}
简写为
(a,b) -> System.out.println(a+b)
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
(a,b) -> {
return a+b;
}
简写为
(a,b) -> a+b
二、lambda表达式实例
1. 集合遍历
private static void out(){
ArrayList<Integer> list = new ArrayList<>();
Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);
list.forEach(System.out::println);
list.forEach(ele -> {
if(ele % 2 == 0){
System.out.println(ele);
}
});
}
2. 集合排序
private static void listSort(){
ArrayList<Person> list = new ArrayList<>();
list.add(new Person("aaa",23));
list.add(new Person("bbb",12));
list.add(new Person("ccc",45));
list.add(new Person("ddd",36));
list.add(new Person("eee",19));
list.add(new Person("fff",19));
list.sort((o1,o2)-> o1.age - o2.age);
System.out.println(list);
}
private static void setSort(){
TreeSet<Person> set = new TreeSet<>((o1,o2)-> {
if(o1.age >= o2.age) {
return -1;
} else {
return 1;
}
});
set.add(new Person("aaa",23));
set.add(new Person("bbb",12));
set.add(new Person("ccc",45));
set.add(new Person("ddd",36));
set.add(new Person("eee",19));
set.add(new Person("fff",19));
System.out.println(set);
}
3.删除集合中符合条件的元素
private static void listRemove(){
ArrayList<Person> list = new ArrayList<>();
list.add(new Person("aaa",23));
list.add(new Person("bbb",12));
list.add(new Person("ccc",45));
list.add(new Person("ddd",36));
list.add(new Person("eee",19));
list.add(new Person("fff",19));
list.removeIf(ele-> ele.age > 40);
System.out.println(list);
}