- 内容提要
- 作者简介
- 译者简介
- 前言
- HTTP
- Servlet 和 JSP
- 下载 Spring 或使用 STS 与 Maven/Gradle
- 手动下载 Spring
- 使用 STS 和 Maven/Gradle
- 下载 Spring 源码
- 本书内容简介
- 下载示例应用
- 第 1 章Spring 框架
- 第 2 章模型 2 和 MVC 模式
- 第 3 章Spring MVC 介绍
- 第 4 章基于注解的控制器
- 第 5 章数据绑定和表单标签库
- 第 6 章转换器和格式化
- 第 7 章验证器
- 第 8 章表达式语言
- 第 9 章JSTL
- 第 10 章国际化
- 第 11 章上传文件
- 第 12 章下载文件
- 第 13 章应用测试
- 附录 A Tomcat
- 附录 B Spring Tool Suite 和 Maven
- 附录 C Servlet
- 附录 D JavaServer Pages
- 附录 E 部署描述符
8.9 操作集合
EL 3.0 带来了很多新特性。 其中一个主要的贡献是操纵集合的能力。你可以通过调用流方法将集合转换为流来使用此功能。
下面展示如何将列表转换为流,假设 myList 是一个 java.util.List:
${myList.stream()}
大部分流的操作会返回另一个流,因而可以形成链式操作。
$ {MyList.stream().operation-1().operation-2().toList()}
在链式操作的末尾,通常调用 toList 方法,以便打印或格式化结果。
以下小节介绍了你可以对流执行的一些操作
8.9.1 toList
toList 方法返回一个 List,它包含与当前流相同的成员。调用此方法的主要目的是轻松地打印或操作流元素。下面是一个将列表转换为流并返回列表的示例:
$ {[100, 200, 300].stream().toList()}
当然这个例子没有什么用。稍后在接下来的小节中,你将看到更多的例子。
8.9.2 toArray
与 toList 类似,但返回一个 Java 数组。同样,在数组中呈现元素通常是有用的,因为许多 Java 方法将数组作为参数。这里是一个 toArray 的例子:
$ {["One","Two","Three"].stream().toArray()}
与 toList 不同,toArray 不打印元素。因此,toList 更经常使用。
8.9.3 limit
limit 方法限制流中元素的数量。
名为 cities 的 List 包含 7 个城市:
[Paris, Strasbourg, London, New York, Beijing, Amsterdam, San Francisco]
下面的代码将元素的数量限制为 3。
$ {cities.stream().limit(3).toList()}
执行时,表达式将返回此列表:
[Paris, Strasbourg, London]
如果传递给 limit 方法的参数大于元素的数量,则返回所有元素。
8.9.4 sort
此方法对流中的元素进行排序。例如,这个表达式
$ {cities.stream().sorted().toList()}
返回如下排序后的列表。
[Amsterdam, Beijing, London, New York, Paris, San Francisco, Strasbourg]
8.9.5 average
此方法返回流中所有元素的平均值。其返回值是一个 Optional 对象,它可能为 null。需要调用 get() 获取实际值。
此表达式返回 4.0:
$ {[1,3,5,7].stream().average().get()}
8.9.6 sum
此方法计算流中所有元素的总和。例如,此表达式返回 16。
$ {[1,3,5,7].stream().sum()}
8.9.7 count
此方法返回流中元素的数量。例如,此表达式返回 7。
$ {cities.stream().count()}
8.9.8 min
此方法返回流的元素中的最小值。同 average 方法一样,其返回值是一个 Optional 对象,因此你需要调用 get 方法来获取实际值。例如,此表达式返回 1。
$ {[1,3,100,1000].stream().min().get()}
8.9.9 max
此方法返回流的元素中的最大值。同 average 方法一样,其返回值是一个 Optional 对象,因此你需要调用 get 方法来获取实际值。例如,此表达式返回 1000。
$ {[1,3,100,1000].stream().max().get()}
8.9.10 map
此方法将流中的每个元素映射到另一个流中的另一个元素,并返回该流。此方法接受一个 lambda 表达式。
例如,此映射方法使用 lambda 表达式 x - > 2 * x,这实际上将每个元素乘 2,并将它们返回到新的流中。
$ {[1,3,5].stream().map(x - > 2 * x).toList()}
返回列表如下:
[2,6,10]
下面是另一个示例,它将字符映射为大写。
$ {cities.stream().map(x - > x.toUpperCase()).toList()}
它返回以下列表。
[PARIS,STRASBOURG,LONDON,NEW YORK,BEIJING,AMSTERDAM,SAN FRANCISCO]
8.9.11 filter
此方法根据 lambda 表达式过滤流中的所有元素,并返回包含结果的新流。
例如,以下表达式测试城市是否以“S”开头,并返回所有的结果。
$ {cities.stream().filter(x - > x.startsWith("S")).toList()}
它产生的列表如下所示:
[Strasbourg, San Francisco]
8.9.12 forEach
此方法对流中的所有元素执行操作。它返回 void。 例如,此表达式将城市中的所有元素打印到控制台。
$ {cities.stream().forEach(x - > System.out.println(x))}
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论