Grouping
Syntax
	$list.groupBy($key-fun)
$list.groupBy($key-fun, $map-fun)
  Description
Groups a list by key values calculated by a key function. If a mapping function is specified, it will be executed on each group afterwards.
The values of the list are filtered according to the key function and stored in a dictionary. If you are only interested in a certain key value, a simple filtering is sufficient. One uses a grouping only if the grouping result is used several times, i.e. many keys are accessed.
Parameter
| Name | Type | Description | Mandatory | Default | 
|---|---|---|---|---|
| list | Set | A list to be grouped. | yes | |
| key-fun | Function | Key function that determines a key value for a value from list. The key value determines the group into which the value from list is sorted. | 
     yes | |
| map-fun | Function | Mapping function which is applied to each created value group. | no | No mapping function will be executed | 
Return value
Type: Business object
A dictionary containing a list of associated elements from list for each calculated key value.
Examples
Grouping of names by first letter
list("Joe", "Tom", "Jane", "Tylor", "Erik")
  .groupBy(name -> $name.subString(0, 1))
  
Output: A dictionary with the following values:
{
  "J": ["Joe", "Jane"], 
  "T": ["Tom", "Tylor"],
  "E": ["Erik"]
}
  A list of names is to be grouped by initial letter. The input list contains the strings "Joe", "Tom", "Jane", "Tylor", and "Erik". The grouping function name -> $name.subString(0, 1) assigns each name to its initial letter. The result is a dictionary that lists under an initial letter all the names in the input list that begin with that letter.
Access to groupings
{
  myGroup = 
    list("Joe", "Tom", "Jane", "Tylor", "Erik")
      .groupBy(name -> $name.subString(0, 1));
  $myGroup["J"];
}
  Output: A list with the values ["Joe", "Jane"].
Since a grouping has a dictionary as its result, access is made accordingly. The above expression evaluates to the list of those names that begin with the letter "J" ("Joe", "Jane"):
Alternatively, a simple filtering can be performed here:
list("Joe", "Tom", "Jane", "Tylor", "Erik")
  .filter(name -> $name.subString(0, 1) == "J")
  Grouping with mapping function
list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  .groupBy(number -> $number % 2, number -> $number / 2)
  Output: A dictionary with the following values:
{
  1.0: [0.5, 1.5, 2.5, 3.5, 4.5], 
  0.0: [1.0, 2.0, 3.0, 4.0, 5.0]
}
  The function first groups all numbers in the list by even and odd numbers. Then these are divided by 2.