private Predicate<T> applyPosDeletes() {
    if (posDeletes.isEmpty()) {
      return record -> false;
    }

    // if there are fewer deletes than a reasonable number to keep in memory, use a set
    if (positionMap == null) {
      positionMap = new HashMap<>();
      List<CloseableIterable<Record>> deletes = Lists.transform(posDeletes, this::openPosDeletes);
      CloseableIterator<Record> iterator = CloseableIterable.concat(deletes).iterator();
      while (iterator.hasNext()) {
        Record deleteRecord = iterator.next();
        String path = FILENAME_ACCESSOR.get(deleteRecord).toString();
        if (!pathSets.contains(path)) {
          continue;
        }
        Set<Long> posSet = positionMap.get(path);
        if (posSet == null) {
          posSet = new HashSet<>();
          positionMap.put(path, posSet);
        }
        posSet.add((Long) POSITION_ACCESSOR.get(deleteRecord));
      }
    }

    return item -> {
      Set<Long> posSet;
      if (currentDataPath != null) {
        if (currentPosSet == null) {
          currentPosSet = positionMap.get(currentDataPath);
        }
        posSet = currentPosSet;
      } else {
        posSet = positionMap.get(filePath(item));
      }

      if (posSet == null) {
        return false;
      }
      return posSet.contains(pos(item));
    };
  }
@return The data in equity delete file
amoro-format-iceberg/src/main/java/org/apache/amoro/io/reader/MixedDeleteFilter.java