集合选择
集合选择是一个强大的表达式语言特性,它允许你通过从其条目中进行选择来将源集合转换为另一个集合。
集合选择使用 .?[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.Iterable
或 java.util.Map
的对象。对于数组或 Iterable
,选择表达式针对每个独立元素进行求值。对于 Map,选择表达式针对每个 Map 条目(Java 类型 Map.Entry
的对象)进行求值。每个 Map 条目都有其 key
和 value
作为属性可用于选择表达式。
给定一个存储在名为 #map
的变量中的 Map
,以下表达式返回一个新的 Map,其中包含原始 Map 中其条目值小于 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 表达式语言也支持集合选择的安全导航。 详情请参阅 安全集合选择和投影。 |