private Predicate<StructForDelete<T>> applyEqDeletes() {
    if (eqPredicate != null) {
      return eqPredicate;
    }

    if (eqDeleteFilesByDeleteIds.isEmpty()) {
      return record -> false;
    }

    List<Predicate<StructForDelete<T>>> isInDeleteSets = Lists.newArrayList();
    List<Closeable> structMapCloseable = Lists.newArrayList();
    BloomFilter<StructLike> bloomFilter = initializeBloomFilter();
    for (Map.Entry<Set<Integer>, Schema> deleteSchemaEntry : deleteSchemaByDeleteIds.entrySet()) {
      Predicate<StructForDelete<T>> predicate =
          applyEqDeletesForSchema(deleteSchemaEntry, bloomFilter, structMapCloseable);
      isInDeleteSets.add(predicate);
    }

    Predicate<StructForDelete<T>> isInDelete =
        isInDeleteSets.stream().reduce(Predicate::or).orElse(record -> false);
    this.eqPredicate =
        new CloseablePredicate<>(isInDelete, structMapCloseable.toArray(new Closeable[0]));
    return isInDelete;
  }
Get all delete ids of equality delete files

<p>For example, if there are two equality delete fields, one is [1, 2] and another is [1], the
delete ids will be [1, 2].

@return delete ids
amoro-format-iceberg/src/main/java/org/apache/amoro/io/reader/CombinedDeleteFilter.java