Collection Selection

选择是一种强大的表达式语言功能,它允许你通过从源集合中选择其条目来将集合转换为另一个集合。

选择使用 .?[selectionExpression] 语法。它筛选集合并返回一个包含原始元素子集的新集合。例如,选择允许我们轻松获取塞尔维亚发明家的列表,如下例所示:

  • Java

  • Kotlin

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

选择受支持的数组和任何实现 java.lang.Iterablejava.util.Map 的内容。对于数组或 Iterable,选择表达式针对每个单独元素计算。对于映射,选择表达式针对每个映射项(Java 类型 Map.Entry 的对象)计算。每个映射条目都有其 keyvalue 可作为属性访问以供选择中使用。

给定存储在名为 #map 的变量中的 Map,以下表达式返回一个新映射,该映射由原始映射中条目的 value 小于 27 的元素组成:

  • Java

  • Kotlin

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

除了返回所有选定的元素外,您还可以仅检索第一个或最后一个元素。要获取与选择表达式匹配的第一个元素,语法为 .^[selectionExpression]。要获取与选择表达式匹配的最后一个元素,语法为 .$[selectionExpression]

Spring 表达式语言还支持集合选择的安全性导航。 有关详细信息,请参阅 Safe Collection Selection and Projection