对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

集合选择

选择(Selection)是一种强大的表达式语言特性,它允许你通过从源集合的条目中进行选取,将其转换为另一个集合。spring-doc.cadn.net.cn

选择(Selection)使用 .?[selectionExpression] 的语法。它会过滤集合,并返回一个包含原集合中部分元素的新集合。例如,通过选择操作,我们可以轻松获取塞尔维亚发明者的列表,如下例所示:spring-doc.cadn.net.cn

List<Inventor> list = (List<Inventor>) parser.parseExpression(
		"members.?[nationality == 'Serbian']").getValue(societyContext);
val list = parser.parseExpression(
		"members.?[nationality == 'Serbian']").getValue(societyContext) as List<Inventor>

选择(Selection)操作支持数组以及任何实现了 java.lang.Iterablejava.util.Map 的对象。对于数组或 Iterable,选择表达式会针对每个单独的元素进行求值。对于 Map,选择表达式则针对每个 Map 条目(即 Java 类型为 Map.Entry 的对象)进行求值。每个 Map 条目都将其 keyvalue 作为属性暴露出来,供选择表达式使用。spring-doc.cadn.net.cn

给定一个存储在名为 Map 的变量中的 #map,以下表达式将返回一个新映射,该映射包含原映射中所有值小于 27 的条目:spring-doc.cadn.net.cn

Map newMap = parser.parseExpression("#map.?[value < 27]").getValue(Map.class);
val newMap = parser.parseExpression("#map.?[value < 27]").getValue() as Map

除了返回所有选中的元素外,你还可以仅获取第一个或最后一个元素。要获取与选择表达式匹配的第一个元素,语法为 .^[selectionExpression]。要获取与选择表达式匹配的最后一个元素,语法为 .$[selectionExpression]spring-doc.cadn.net.cn