private Publisher<WriteResult> delete(StandardOperations.Delete op) {
      if (!op.query().filter().isPresent()) {
        // delete all
        int deleted = store.size();
        store.clear();
        return Flowable.just(WriteResult.empty().withDeletedCount(deleted));
      }

      Expression filter = op.query().filter().orElseThrow(() -> new IllegalArgumentException("no filter"));

      Predicate<Object> predicate = ExpressionInterpreter.of(filter).asPredicate();
      int deleted = 0;
      Iterator<Object> iter = store.values().iterator();
      while (iter.hasNext()) {
        if (predicate.test(iter.next())) {
          deleted++;
          iter.remove();
        }
      }

      return Flowable.just(WriteResult.empty().withDeletedCount(deleted));
    }
mapping between class and its store
criteria/inmemory/src/org/immutables/criteria/inmemory/InMemoryBackend.java