lambda优缺点:
优点:
- 简洁。
- 非常容易并行计算。
- 可能代表未来的编程趋势。
缺点:
- 若不用并行计算,很多时候计算速度没有比传统的 for 循环快。(并行计算有时需要预热才显示出效率优势)
- 不容易调试。
- 若其他程序员没有学过 lambda 表达式,代码不容易让其他语言的程序员看懂。
总结:
lambda表达式中forEach方法与我们的普通的for循环输出效果相差无几
最主要的是我们可以用这个表达式来装逼
符号表示:
lambda是一个匿名函数
()里的表示参数
{}里的表示方法体
-> 表示lambda运算符
集中简单的运用方法:
执行方法1
这是用的lambda方法中的sort方法
在sort方法中 o1表示最后边的值、o2表示倒数第二个值 处理元素是从后边开始的
public class Exersice1 {
//集合排序
/**ArrayList<>*/
public static void main(String[] args) {
/**
* 需求:
* 已知在ArryList中有若干个Person类对象,将这些Person对象按照年龄来降序排序
*/
List<Person> list = new ArrayList<>();
list.add(new Person("小蓝",10));
list.add(new Person("小红",11));
list.add(new Person("小紫",18));
list.add(new Person("小橙",20));
//排序
//在sort方法中,o1是最后面的元素,o2是倒数第二个元素,以此类推,流是处理元素是从后面开始取值。
list.sort((o1,o2) -> o2.age - o1.age);
System.out.println(list);
}
}
运行效果:
降序排序
执行方法2
这是用的lambda方法中的TreeSet排序方法
public class Exersice2 {
public static void main(String[] args) {
//TreeSet排序
//使用Lambda表达式来实现Comparator接口,并实例化一个TreeSet对象
TreeSet<Person> set = new TreeSet<>((o1,o2) -> {
if(o1.age >= o2.age){
return -1;
}else {
return 1;
}
});
set.add(new Person("小蓝",10));
set.add(new Person("小红",11));
set.add(new Person("小紫",18));
set.add(new Person("小橙",20));
System.out.println(set);
}
}
运行效果:
执行方法3
这是用的lambda方法中的集合的遍历输出,forEach方法,这与普通的for循环相差无几
public class Exersice3 {
public static void main(String[] args) {
//集合的遍历
ArrayList<Integer> list = new ArrayList<>();
//添加元素
Collections.addAll(list,1,2,3,4,5,6,7,8,9);
for (Integer integer : list) {
System.out.println(integer);
}
//将集合中的每一个元素带入到方法accept中
list.forEach(System.out::println);
//还可以用forEach方法输出集合中的偶数
list.forEach(elm -> {
if(elm %2 == 0){
System.out.println(elm);
}
});
}
}
执行效果:
执行方法4
这是用的lambda方法中的removeIf删除方法
public class Exersice4 {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person("小蓝",10));
list.add(new Person("小红",11));
list.add(new Person("小紫",10));
list.add(new Person("小橙",20));
//之前删除年龄大于10岁的元素 使用迭代器删除
ListIterator<Person> it = list.listIterator();
while (it.hasNext()){
Person person = it.next();
if (person.age > 10){
it.remove();
}
}
//使用lambda实现
//将集合中的每一个元素都带入到test方法中,如果返回值是true将删除
list.removeIf(t -> {
if (t.age > 10){
return true;
}else {
return false;
}
});
//简化
list.removeIf(t -> t.age>10);
System.out.println(list);
}
}
执行效果:
执行方法5
这是用的lambda方法中的开辟线程就行输出
public class Exersice5 {
public static void main(String[] args) {
//使用lambda表达式开辟一个线程,做一个数字的输出
Thread t = new Thread(() -> {
for (int i =0; i<10; i++){
System.out.println(i);
}
});
t.start();
}
}
执行效果: