总结:
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中,Stream API是Java 8中引入的一种新的数据处理方式,它可以对集合进行各种操作,如过滤、映射、聚合等。Lambda表达式是Java 8中引入的一种新的函数式编程方式,它可以将函数作为参数传递给其他函数。 ...
Java8的lambda表达式
主要内容: ● 为何需要lambda,...第2章 Java lambda表达式的基础知识 23 第3章 流与管道介绍 55 第4章 终止流:收集与汇聚 91 第5章 起始流:源与分割迭代器 135 第6章 流的性能 167 第7章 使用默认方法演化API 195
java8lambda表达式的安卓Studio工程Demo,供初步学习使用
说明:本文档主要讲解java8中的Lambda表达式。内容完全基于java 8 tutorial,加上一些自己的注释与理解。使用代码本身来进行解释(这是java 8 tutorial中的风格),同时去掉一些无关紧要的知识点(比如泛型等),...
Stream和Lambda表达式是Java 8引入的两个重要特性,它们极大地简化了集合处理和函数式编程的复杂性。以下是关于Stream和Lambda表达式的最佳实践介绍: Lambda表达式 Lambda表达式允许我们以简洁的方式表示匿名函数...
java lambda表达式,...lambda 表达式是在 Java 8 中添加的,并提供以下功能。 启用将功能视为方法参数,或将代码视为数据。 可以在不属于任何类的情况下创建的函数。 lambda 表达式可以像对象一样传递并按需执行。
视频地址:https://www.bilibili.com/video/BV1ut411g7E9 【Java8】Lambda表达式 和 Stream API 详解笔记 md文档
Lambda 表达式的语法糖是指 Java 8 中引入的 Lambda 表达式语法,允许开发者使用更简洁的方式编写 Lambda 表达式。Lambda 语法糖包括参数列表、箭头和函数体三个部分。 1.1.1 语法 Lambda 表达式的语法糖可以使用...
NULL 博文链接:https://shmilyaw-hotmail-com.iteye.com/blog/2251821
关于Java中lambda的表达式,Java多核编程,清华大学(出版)
Java8发布到现在至少3年了,但是对Lambda表达式不熟悉、看不懂、不会用的现象非常常见。 即使是升级到JDK1.8了,但是很多开发者依然是停留在1.8之前的开发方式,使用的也是非常老旧和过时的API,遇到函数式接口也是...
* lambda 表达式的类型推断:在 C# 中,lambda 表达式可以自动推断出其类型,这使得开发者可以更方便地使用 lambda 表达式。 * lambda 表达式的闭包:lambda 表达式可以捕获外部变量,并将其作为闭包的一部分。 * ...
JAVA 8 Lambda表达式-Lambda Expressions.rar
java lambda 表达式中文详解(语言篇和类库篇),更方便更快捷了解java lambda表达式
精通lambda表达式:Java多核编程,使用lambda表达式和流的最佳实践
《精通Lambda表达式:Java多核编程》
2_Lambda表达式.zip2_Lambda表达式.zip2_Lambda表达式.zip
3、多线程编程:Lambda表达式在多线程编程中有很好的应用。本源码资源将介绍如何使用Lambda表达式简化线程的创建、同步和并行处理操作。 4、函数式接口使用:学习如何使用Lambda表达式与Java中的函数式接口进行交互...
这个是专门介绍java 8 lambda表达式的一本书,目前没有中文版的,这个是英文版的。