We could:

  - don't create list `items` and just use stream returned by `splitter`
  - `joiner.join` can take iterator as argument so it would take rest of `splitter.split` results