Je pense que plutôt que de faire un bête `add_all`, on y gagnerait à faire comme le Array

    for i in data do if i.intersects(item) then mdata.add(i)

Je ne pense pas qu'il y un réel surcoût ; au contraire, ca éviterait d'ajouter un élément à la collection qui sera filtré ensuite par le client.
En plus ce éviterait au client de faire lui-même la boucle, ce qui est plus simple en terme d'API
Enfin, les résultats des la fonction pour toutes les implémentations deviendraient équivalentes.