集合投影
投影(Projection)允许一个集合来驱动子表达式的求值,其结果是一个新的集合。投影的语法是.![projectionExpression]。例如,假设我们有一个发明家列表,但我们需要的是他们出生的城市列表。实际上,我们希望对于发明家列表中的每个条目,都能求出placeOfBirth.city的值。以下示例使用了投影来实现这一功能:
- Java
- Kotlin
// evaluates to ["Smiljan", "Idvor"]
List placesOfBirth = parser.parseExpression("members.![placeOfBirth.city]")
.getValue(societyContext, List.class);
// evaluates to ["Smiljan", "Idvor"]
val placesOfBirth = parser.parseExpression("members.![placeOfBirth.city]")
.getValue(societyContext) as List<*>
投影操作支持对数组以及任何实现了java.lang_iterable或java.util.Map接口的类型进行。当使用映射(map)来驱动投影时,投影表达式会针对映射中的每个条目(表示为Java的Map.Entry)进行求值。通过对映射进行投影操作后,得到的结果是一个列表,该列表包含了针对每个映射条目求值后的投影表达式的结果。
备注
Spring表达式语言还支持对集合进行安全导航和投影操作。
详情请参阅安全集合选择与投影。