anchor.diff:  
   (2) The `map` method is called on an `Option`, but it is difficult to see by looking at the code!
   
  -(3) Getting the value (if present) or a default value (if not) is done through the `getOrElse` method. We changed the name to follow current usage although it is implemented through a fold!
  +(3) Getting the value (if present) or a default value (if not) is done through the `getOrElse` method. We changed the name to follow conventional usage although it is implemented through a fold!
   
   (4) We can simplify getting the value or default value from the resulting `Option`.
   
  
positive.code: 
  == Solving the real problem
  
  Beside efficiency, we have a more important problem: our program does not solve our real problem, because it allows using several times the same item. It was done this way for simplification. Now, we can fix this easily:
  
  [source,java]
  ----
  
negative.code: 
  Again, this method is not optimized, since it will have to traverse the whole list instead of escaping as soon as a matching element is found.
  
  Note that we must define an `equals` method in our `Item` class. I will not show it here, since you certainly know how to do this. Moreover, any good IDE will generate it for you. However, to be really complete, we should add a unique ID to the `Item` class. Forgetting to do so will make impossible to have two different items with the same weight and value in the list. A very simple way to do this, if the ID is not to be used for anything else, is to generate a UUID and use it for equality:
  
  [source,java]
  ----
  