code: List<List<TaskId>> interleaveTasksByGroupId(final Collection<TaskId> taskIds, final int numberThreads) {
      final LinkedList<TaskId> sortedTasks = new LinkedList<>(taskIds);
      Collections.sort(sortedTasks);
      final List<List<TaskId>> taskIdsForConsumerAssignment = new ArrayList<>(numberThreads);
      for (int i = 0; i < numberThreads; i++) {
        taskIdsForConsumerAssignment.add(new ArrayList<>());
      }
      while (!sortedTasks.isEmpty()) {
        for (final List<TaskId> taskIdList : taskIdsForConsumerAssignment) {
          final TaskId taskId = sortedTasks.poll();
          if (taskId == null) {
            break;
          }
          taskIdList.add(taskId);
        }
      }
      return taskIdsForConsumerAssignment;
    }
docs: visible for testing