Lambda表达式 怎么debug调试

前言

Lambda 表达式是 JDK8 的一个重要新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便和高效。

 Lambda表达式仅能放入如下代码: 必须是预定义使用了 @Functional 注释的函数式接口,自带一个抽象函数的方法,或者单个抽象方法 的类型。

这些称为Lambda表达式的目标类型,可以用作返回类型,或lambda目标代码的参数。例如,若一个方法接收Runnable、Comparable或者 Callable 接口,都有单个抽象方法,可以传入Lambda表达式。类似的,如果一个方法接受声明于 java.util.function 包内的接口,例如 Predicate、Function、Consumer 或 Supplier,那么可以向其传Lambda表达式。

Lambda表达式内可以使用方法引用,仅当该方法不修改Lambda表达式提供的参数。然而,若对参数有任何修改,则不能使用方法引用,而需键入完整地Lambda表达式。

Lambda表达式在Java中又称为闭包或匿名函数。

语法格式

lambda 表达式的语法格式如下:

(parameters) -> expression
或
(parameters) ->{ statements; }

parameters 是参数列表,expression 或 { statements; } 是Lambda 表达式的主体。如果只有一个参数,可以省略括号;如果没有参数,也需要空括号。多个参数则用逗号分隔。

Lambda 表达式是函数式编程的一种体现,它允许将函数当作参数传递给方法,或者将函数作为返回值,这种支持使得 Java 在函数式编程方面更为灵活,能够更好地处理集合操作、并行计算等任务。

代码案例:

List<String> names = Arrays.asList("张三", "李四", "王五");

// 使用 Lambda 表达式作为参数传递给方法
names.forEach(name -> System.out.println(name));

// 使用方法引用
//names.forEach(System.out::println);  

 

Lambda表达式怎么debug调试呢?

其实,它和平常debug一样,打上断点,但是会有几个选择项,需要debug到stream处,点击下图中的按钮(Stream Trace),需要加载一会,就可以看到数据的变化。按使用的方法,map后或filter后的数据,一目了然。

下面我们截图实例说明:

  • 打上断点

  •  点击Stream Trace这里

  • 经过filter之后的数据

  • 经过 collect之后的数据

  最后,附上案例源码:


public class LambdaDemo {

    /**
     *
     * @param args
     */
    public static void main(String[] args) {

        List<String> list = new ArrayList<>();

        list.add("Java语言程序设计(一)");
        list.add("数据结构");
        list.add("数据库系统原理");
        list.add("Java语言程序设计(二)");

        List<SysUser> userList = new ArrayList<>();

        SysUser user1 = new SysUser();
        user1.setAddress("上海市浦东新区");
        user1.setUserName("张三");
        userList.add(user1);

        SysUser user2 = new SysUser();
        user2.setAddress("上海市唐镇");
        user2.setUserName("刘敏");
        userList.add(user2);

        SysUser user3 = new SysUser();
        user3.setAddress("上海市浦东新区");
        user3.setUserName("王佳");
        userList.add(user3);
        list.forEach(System.out::println);

        List<String> collect = list.stream().filter(x -> x.contains("Java")).collect(Collectors.toList());
        collect.forEach(System.out::println);

        List<String> collect1 = userList.stream().map(user -> user.getUserName()).collect(Collectors.toList());

        collect1.forEach(System.out::println);


        Comparator<String> comparator = new Comparator<String>() {

            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        };

        Comparator<Integer> comparator1 = (o1, o2) -> {
            System.out.println("你的打印值比较:");
            return o1.compareTo(o2);
        };

        int compare = comparator1.compare(21, 7);

        System.out.println("比较大小:"+ compare);


        Thread thread = new Thread(() -> {
            System.out.println("111");
            System.out.println("3333");
        });
        thread.start();
    }
}

相关推荐

  1. Lambda表达式

    2024-05-13 08:22:07       50 阅读
  2. Lambda表达式

    2024-05-13 08:22:07       54 阅读
  3. Lambda 表达式

    2024-05-13 08:22:07       39 阅读
  4. Lambda表达式

    2024-05-13 08:22:07       37 阅读
  5. Lambda表达式

    2024-05-13 08:22:07       35 阅读
  6. lambda表达式

    2024-05-13 08:22:07       36 阅读
  7. Lambda表达式

    2024-05-13 08:22:07       42 阅读
  8. Lambda表达式

    2024-05-13 08:22:07       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 08:22:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 08:22:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 08:22:07       82 阅读
  4. Python语言-面向对象

    2024-05-13 08:22:07       91 阅读

热门阅读

  1. Go 之 interface接口理解

    2024-05-13 08:22:07       33 阅读
  2. npm详解

    2024-05-13 08:22:07       29 阅读
  3. orangepi-5b 使用 rknn-toolkit2 实测

    2024-05-13 08:22:07       33 阅读
  4. 每日一题10:Pandas:重塑数据-联结

    2024-05-13 08:22:07       30 阅读
  5. C#面:解释什么是WCF?目前最新的版本是多少

    2024-05-13 08:22:07       36 阅读
  6. ETL(抽取、转换、加载)

    2024-05-13 08:22:07       24 阅读
  7. Cpython 的使用

    2024-05-13 08:22:07       33 阅读