Lambda表达式详解(优缺点以及简单用法)

本文详细介绍了Java中的Lambda表达式的优缺点。优点包括简洁性、支持并行计算,可能成为未来编程趋势;缺点则在于非并行计算时效率不提升,调试困难,且对未接触过的程序员来说难以理解。文中通过示例展示了lambda在forEach、sort、TreeSet排序、集合遍历及多线程输出等场景的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lambda优缺点:

优点:

  1. 简洁。
  2. 非常容易并行计算。
  3. 可能代表未来的编程趋势。

缺点:

  1. 若不用并行计算,很多时候计算速度没有比传统的 for 循环快。(并行计算有时需要预热才显示出效率优势)
  2. 不容易调试。
  3. 若其他程序员没有学过 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();
    }
}

执行效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值