`
y806839048
  • 浏览: 1121503 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

在Java 8中对stream带有lambda表达式的操作进行调试

    博客分类:
  • java
阅读更多

总结:

filter过滤器的return 就是执行完了器其一次过滤操作,map的return 就是执行完了其一次修操作,filte,map都是要晚于collect方式执行--调试还要注意分行写

 单语句不需要{}和return可以省略 ,多语句需要

示例:

 

 

 

通常在开发程序时候都会对程序进行单步或设置断点调试代码。而在Java 8中在使用stream时采用这种方式调试却与原有的方式稍有不同。

 

        List<String> nations = Arrays.asList("A","B","C");

        Set<String> nationalities = new HashSet<>();

        for (String nation : nations) {

            if (nation.startsWith("A")) {

                System.out.println("Found nationality: " + nation);

                nationalities.add(nation);

            }

        }

 

 

 

 

 

上面这段代码,当满足if条件时,我们可以将满足条件的结果输出,以验证程序是否正确执行。若通过Java 8中的stream来改写上述操作,代码如下。

 

nations.stream().filter((s) -> s.startsWith("A")).forEach(

                nationality -> System.out.println("Found: " + nationality));

 

 

 

我们通过forEach来输出过滤后的结果。然而这样做,将无法再继续在这个流上进行操作。如果还想继续对该流进行操作,那么需要重新建立这个流。例如还希望进行map操作并观察结果。

 

nations.stream().filter((s) -> s.startsWith("A"))

.map((param) -> param + "/")

.forEache(nationality -> System.out.println("Found: " + nationality));

 

 

 

为了观察中间结果,便于调试改错,我们可以通过peek方法来完成。

 

        List<String> nations = Arrays.asList("A","B","C","A1");

        nations.stream().

        filter(nation -> {

            return nation.startsWith("A"); 

        }).

        peek(nation -> System.out.println(nation)).

        map((t) ->  {

            return t + "a";

        }).

        peek(nation -> System.out.println(nation)).

        collect(Collectors.toList());

 

这样便可以观察每一步的中间结果。

 

此外我们还可以通过设置断点的方式来观察结果。

 

这里写图片描述

 

注意,stream中的map属于惰性操作(Lazy operation),即当终结操作发生后才会执行map,filter同理。在这里终结是指collect。此外在设置断点时需要将stream调用的方法分多行写出,例如上图所示。通过上述方法可以观察Stream中的结果,进行代码调试。

 

参考:

1.http://stackoverflow.com/questions/24541786/how-to-debug-stream-map-with-lambda-expressions

2.Java 8 lambda,Chapter7

 

 

分享到:
评论

相关推荐

    最新Java JDK 8免安装版(Linux 64位)

    3. **默认方法**:在Java 8的接口中,可以定义带有实现的默认方法。这使得接口可以随着版本更新而添加新的方法,而不破坏已有的实现。 4. **Stream API**:这是一个强大的新功能,可以对集合进行高效的操作,如过滤...

    jdk1.8.102 java8

    在Java 8中,引入了许多新特性和改进,旨在提高开发效率和代码的可读性。以下是一些主要知识点: 1. **Lambda表达式**:这是Java 8最大的变革之一,它允许以更简洁的方式表示匿名函数。Lambda表达式使得编写函数式...

    Java 8 官方免安装包+中文api

    7. ** Nashorn JavaScript引擎**:Java 8中引入了Nashorn JavaScript引擎,允许在Java应用程序中直接执行JavaScript代码,实现了Java与JavaScript之间的互操作性。 以上是关于“Java 8 官方免安装包+中文api”...

    JAVA8 完整源码(包含Sun包源码)

    6. **默认方法**:在接口中,Java 8 允许定义带有实现的默认方法,用 `default` 关键字表示。这使得接口升级时,不会破坏已有的实现类,如 `java.util.Comparator` 接口中的 `thenComparing()` 方法。 7. **接口的...

    jdk1.8 zip版rar版压缩文件安装文件java8

    10. **新的枚举语法**:在Java 8中,可以在枚举类中定义接口,并让枚举实例直接实现这些接口,简化了枚举的使用。 通过下载JDK 1.8的zip或rar压缩文件,用户可以快速方便地获取完整的Java开发环境。解压文件后,...

    java jDK8u202 最后一个免费版本

    5. **默认方法**:在接口中添加了带有实现的方法,使得接口能更好地适应演进的需求,而无需修改已实现该接口的类。 6. **新的Optional类**:用于表示可能为null的值,帮助开发者避免空指针异常,提高了代码的健壮性...

    经典的Java8 JDK

    6. **默认方法**:接口在Java 8中增加了默认方法(default methods)的特性,允许在接口中定义带实现的方法,不强制实现类覆盖,这样可以避免破坏现有的接口实现。 7. **Optional类**:为了解决Java中的null安全...

    java环境,jdk8

    Stream API是Java 8中另一个重要的新特性,它提供了对集合数据进行高效、声明性处理的方法。通过流,你可以对集合进行过滤、映射、归约等操作,非常适合进行数据处理和转换。例如,我们可以方便地找出一个列表中的...

    java api 1.8 chm 文档

    5. **默认方法**:接口在Java 8中增加了默认方法,允许接口定义实现代码,这使得接口可以在不破坏向后兼容性的情况下添加新的功能。 6. ** Nashorn JavaScript引擎**:Java 8引入了Nashorn JavaScript引擎,允许在...

    jdk1.8,用Java的都需要

    7. **默认方法**:在接口中,Java 8允许定义带有默认实现的方法,这使得在不破坏向后兼容性的前提下,可以向已有的接口添加新方法。 8. **Nashorn JavaScript引擎**:Java 8包含了Nashorn JavaScript引擎,允许在...

    java jdk8免安装版压缩包.zip

    3. **Lambda表达式**: Lambda表达式是JDK8中的一个重大革新,它使得函数式编程风格在Java中变得更加简洁。Lambda表达式可以看作是无名函数,可以在需要函数对象的地方使用,减少了代码量并提高了可读性。 4. **函数...

    java8 jdk1.8免安装包

    - **默认方法**:允许在接口中定义带有实现的方法,增强了接口的功能。 - **Volatile增强**:提升了并发性能,降低了内存可见性问题。 这些特性极大地提高了Java的开发效率和程序的性能。总的来说,"java8 jdk1.8...

    jdk中文api.zip

    6. **默认方法**:在接口中,Java 1.8引入了默认方法的概念,允许接口中定义带有实现的方法,为接口添加新的功能,同时保持向后兼容性。 7. ** Nashorn JavaScript引擎**:Java 1.8集成了Nashorn JavaScript引擎,...

    Java-JDK1.8官方完整正版-windows-x64位

    在Java 8中,`Runnable`、`Callable`和新的`Consumer`、`Supplier`、`Function`等接口都属于函数接口。这些接口配合Lambda表达式使用,可以方便地实现函数式编程风格。 Stream API是JDK 1.8新增的数据处理模型,它...

    java jdk1.8 64位

    4. **Stream API**:Stream API是Java 8新加入的一个重要特性,它提供了对集合进行高效且声明式的数据处理能力,支持并行操作,可以方便地进行过滤、映射、归约等操作。 5. **Date和Time API**:Java 8对日期和时间...

    jdk8u101-x64

    在Java SE 8中,引入了一系列重要的新特性和改进,其中包括: 1. **lambda表达式**:这是Java 8的一项重大革新,它允许开发者以更简洁的方式处理函数式编程场景,减少了匿名内部类的使用。Lambda表达式可以被赋值给...

    Jdk8下载(附:官网下载地址)

    4. **默认方法**:在接口中,Java 8引入了默认方法的概念,允许在接口中定义带有实现的方法,这使得接口升级变得更加灵活,同时避免了对现有实现的破坏。 5. **日期和时间API的改进**:Java 8提供了新的`java.time`...

    JDK1.8_64位

    9. **类型推断增强**:在JDK8中,类型推断机制得到加强,尤其是对于lambda表达式和方法引用来说,编译器能更准确地推断出隐含的类型。 10. **并行GC优化**:JDK8对垃圾收集器进行了改进,如G1垃圾收集器的优化,...

    Java_jdk_8.rar

    10. **重复注解**:在Java 8中,可以在同一元素上使用多个相同类型的注解,而不会引发错误。 配置Java环境变量是使用Java开发工具的基础步骤。通常需要设置两个环境变量: - `JAVA_HOME`:指向JDK的安装目录,例如`...

    JAVA-API-1.8中文文档(完整高清)

    Java API 1.8引入了许多新特性,包括Lambda表达式、Stream API、默认方法、新的日期时间API、并发改进等,这些都是Java 8的重要更新。 1. Lambda表达式:Lambda表达式是Java 8引入的一种简洁的匿名函数表示形式,它...

Global site tag (gtag.js) - Google Analytics