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 表达式实例
接口中若只提供一个方法,除此之外没有任何的其他方法定义,这样的接口称为函数式接口,而只有函数式接口才可以被Lambda
表达式所使用。
0.接口的简单实现
- 不使用
lambda
表达式实现
interface IMessage{
public void send(String msg);
}
public class Hello {
public static void main(String[] args) {
IMessage iMsg = new IMessage() {
@Override
public void send(String msg) {
// TODO Auto-generated method stub
System.out.println(msg);
}
};
iMsg.send("发送消息!");
}
}
- 使用
lambda
表达式实现
@FunctionalInterface
interface IMessage{
public void send(String msg);
}
public class Hello {
public static void main(String[] args) {
IMessage iMsg = msg -> System.out.println(msg);
iMsg.send("发送消息!");
}
}
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. 集合排序
// ArrayList 排序
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);
}
// TreeSet 排序
private static void setSort(){
// TreeSet<Person> set = new TreeSet<>((o1,o2)-> o1.age - o2.age);
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.删除集合中符合条件的元素
// ArrayList 删除元素
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);
}