public IcebergFindFiles inPartitions(PartitionSpec spec, List<StructLike> partitions) {
    if (partitionSet == null) {
      this.partitionSet = PartitionSet.create(specsById);
      this.partitionFilters = new HashMap<>();
    }
    for (StructLike partition : partitions) {
      partitionSet.add(spec.specId(), partition);
    }

    Expression partitionSetFilter = Expressions.alwaysFalse();
    for (StructLike partitionData : partitions) {
      Expression partFilter = Expressions.alwaysTrue();
      for (int i = 0; i < spec.fields().size(); i += 1) {
        PartitionField field = spec.fields().get(i);
        Object partitionValue = partitionData.get(i, Object.class);
        if (Objects.isNull(partitionValue)) {
          partFilter = Expressions.and(partFilter, Expressions.isNull(field.name()));
        } else {
          partFilter = Expressions.and(partFilter, Expressions.equal(field.name(), partitionValue));
        }
      }
      partitionSetFilter = Expressions.or(partitionSetFilter, partFilter);
    }

    partitionFilters.put(spec.specId(), partitionSetFilter);
    return this;
  }
Base results on files in the snapshot that was current as of a timestamp.

@param timestampMillis a timestamp in milliseconds
@return this for method chaining
amoro-format-iceberg/src/main/java/org/apache/iceberg/IcebergFindFiles.java