default ParallelIterator parallelIterator(Stats stats, int threads) {
    List<WeightedHandoffQueue<SortableFeature>> queues = IntStream.range(0, threads)
      .mapToObj(i -> new WeightedHandoffQueue<SortableFeature>(500, 10_000))
      .toList();
    Worker reader = new Worker("read", stats, threads, shard -> {
      try (var next = queues.get(shard)) {
        Iterator<SortableFeature> entries = iterator(shard, threads);
        while (entries.hasNext()) {
          next.accept(entries.next(), 1);
        }
      }
    });
    return new ParallelIterator(reader, LongMerger.mergeSuppliers(queues, SortableFeature.COMPARE_BYTES));
  }
Reads temp features using {@code threads} parallel threads and merges into a sorted list.

@param stats   Stat tracker
@param threads The number of parallel read threads to spawn
@return a {@link ParallelIterator} with a handle to the new read threads that were spawned, and in {@link Iterable}
        that can be used to iterate over the results.
planetiler-core/src/main/java/com/onthegomap/planetiler/collection/FeatureSort.java