public static String toString(Collection<MixedFileScanTask> tasks) {
    if (tasks == null) {
      return "[]";
    }
    return Iterables.toString(
        tasks.stream()
            .map(MixedFileScanTask::file)
            .map(
                primaryKeyedFile ->
                    MoreObjects.toStringHelper(primaryKeyedFile)
                        .add("\n\tfile", primaryKeyedFile.path().toString())
                        .add("\n\ttype", primaryKeyedFile.type().shortName())
                        .add("\n\tmask", primaryKeyedFile.node().mask())
                        .add("\n\tindex", primaryKeyedFile.node().index())
                        .add("\n\ttransactionId", primaryKeyedFile.transactionId())
                        .add("\n\tfileSizeInBytes", primaryKeyedFile.fileSizeInBytes())
                        .add("\n\trecordCount", primaryKeyedFile.recordCount())
                        .toString())
            .collect(Collectors.toList()));
  }
Converts a collection of MixedFileScanTask objects to a string representation. The string
representation includes details about each file, such as its path, type, mask, index,
transaction ID, file size in bytes, and record count.

@param tasks the collection of MixedFileScanTask objects to convert to a string
@return a string representation of the MixedFileScanTask objects
amoro-format-iceberg/src/main/java/org/apache/amoro/utils/FileScanTaskUtil.java