public List<ContentFile<?>> getOutputContentFiles(List<JobContext> jobContexts) throws IOException {
    Multimap<OutputTable, JobContext> outputs = collectOutputs(jobContexts);
    JobConf jobConf = jobContexts.get(0).getJobConf();

    ExecutorService fileExecutor = fileExecutor(jobConf);
    ExecutorService tableExecutor = tableExecutor(jobConf, outputs.keySet().size());

    Collection<ContentFile<?>> files = new ConcurrentLinkedQueue<>();
    try {
      Tasks.foreach(outputs.keySet())
          .suppressFailureWhenFinished()
          .executeWith(tableExecutor)
          .onFailure((output, exc) -> LOG.warn("Failed to retrieve merge input file for the table {}", output, exc))
          .run(output -> {
            for (JobContext jobContext : outputs.get(output)) {
              Table table = output.table;
              String jobLocation = generateJobLocation(table.location(), jobConf, jobContext.getJobID());
              // list jobLocation to get number of forCommit files
              // we do this because map/reduce num in jobConf is unreliable
              // and we have no access to vertex status info
              int numTasks = listForCommits(jobConf, jobLocation).size();
              FilesForCommit results = collectResults(numTasks, fileExecutor, table.location(), jobContext,
                  table.io(), false);
              files.addAll(results.dataFiles());
              files.addAll(results.deleteFiles());
            }
          }, IOException.class);
    } finally {
      fileExecutor.shutdown();
      if (tableExecutor != null) {
        tableExecutor.shutdown();
      }
    }
    return Lists.newArrayList(files);
  }
Generates a list of ContentFile objects of the output files in the jobContexts.
@param jobContexts List of jobContexts
@return Returns the list of file statuses of the output files in the jobContexts
@throws IOException Throws IOException
iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergOutputCommitter.java