I have the following code:

```
Sighting.all
      .iterator
      .map(s => (s, haversineDistance(s, ourLocation)))
      .toSeq
      .sortBy(_._2)
      .take(5)

```

As expected, it returns 5 sightings closests to `ourLocation`.

However, for a very large number of sightings, it does not scale well. We can instead just go through all sightings O(N) and find the 5 closest ones, instead of sorting them all and thus doing O(N\*logN). How to do so idiomatically?