anchor.diff:      }
   ----
   
  -However, that scales poorly because it doesn't do an <<incrementalScoreCalculation,incremental calculation>>:
  -When the planning variable of a single `Talk` changes, to recalculate the score,
  -the normal Streams API has to execute the entire stream from scratch.
  -
  -On the other hand, the ConstraintStreams API uses <<incrementalScoreCalculation,deltas>>:
  +However, this approach scales poorly because it does not perform an <<incrementalScoreCalculation,incremental calculation>>.
  +In the previous example,when the planning variable of a single `Talk` intety changes, to recalculate the score the Java streams package must execute the entire stream from scratch.
  +
  +//COMMENT: Lukas I have made the Java streams API lowercase and not code - it looks like it's a general term that includes specific packages, for exmpl java.util.stream. Let me know if I'm mistaken. Also, if I'm using 'package' incorrectly.
  +
  +On the other hand, the `ConstraintStreams` API uses <<incrementalScoreCalculation,deltas>>:
   
   ////
   TODO Replace the previous sentence when PLANNER-1709 is fixed.
  
positive.code: 
  There are several collectors available out of the box. You can also provide your own collectors by implementing the
  `org.optaplanner.core.api.score.stream.uni.UniConstraintCollector` interface, or its `Bi...`, `Tri...` counterparts.
  
  [collectorsOutOfTheBox]
  === Out-of-the-box Collectors
  
  The following section focuses on the collector implementations provided out of the box. This section only describes the
  `int`-based variants of the collectors in detail. Many of the collectors also provide variants for other applicable
  result data types, such as `long`, `BigDecimal` or `Duration`. You can find a complete list by exploring the
  `org.optaplanner.core.api.score.stream.ConstraintCollectors` class.
  
  [collectorsCount]
  ==== Collecting `count()`
  
  The `ConstraintCollectors.count(...)` counts all elements in a group. For example, the following use of the collector
  gives a number of items for two separate groups - one where the talks have unavailable speakers, and one where they
  don't.
  
  [source,java,options="nowrap"]
  ----
  
negative.code: 
  
  [[constraintStreamsGroupingAndCollectors]]
  
  == Constraint Stream API grouping and collectors
  
  Grouping collects items in a stream according to user-provided criteria, also called a group key. This is similar to what a `GROUP BY` SQL clause does. Additionally, some grouping operations also accept one or more collectors, which provide various aggregation functions.
  
  For example, the following code snippet groups all processes by the computer they run on, sums up all of the power required by the processes on that computer using the `ConstraintCollectors.sum(...)` collector, and then penalizes every computer whose processes consume more power than is available:
  
  [source,java,options="nowrap"]
  ----
  