anchor.diff:  	val placesOfBirth = parser.parseExpression("members.![placeOfBirth.city]") as List<*>
   ----
   
  -You can also use a map to drive projection and, in this case, the projection expression is
  +Projection is supported for arrays and anything that implements `java.lang.Iterable` or
  +`java.util.Map`. When using a map to drive projection, the projection expression is
   evaluated against each entry in the map (represented as a Java `Map.Entry`). The result
   of a projection across a map is a list that consists of the evaluation of the projection
   expression against each map entry.
  
positive.code: [[expressions-collection-projection]]
  === Collection Projection
  
  Projection lets a collection drive the evaluation of a sub-expression, and the
  result is a new collection. The syntax for projection is `.![projectionExpression]`. For
  example, suppose we have a list of inventors but want the list of
  cities where they were born. Effectively, we want to evaluate 'placeOfBirth.city' for
  every entry in the inventor list. The following example uses projection to do so:
  
  [source,java,indent=0,subs="verbatim,quotes",role="primary"]
  .Java
  
negative.code: 			"members.?[nationality == 'Serbian']").getValue(societyContext) as List<Inventor>
  ----
  
  Selection is supported for arrays and anything that implements `java.lang.Iterable` or
  `java.util.Map`. For a list or array, the selection criteria is evaluated against each
  individual element. Against a map, the selection criteria is evaluated against each map
  entry (objects of the Java type `Map.Entry`). Each map entry has its `key` and `value`
  accessible as properties for use in the selection.
  
  The following expression returns a new map that consists of those elements of the
  original map where the entry's value is less than 27:
  
  [source,java,indent=0,subs="verbatim,quotes",role="primary"]
  .Java
  