Votei na resposta do código em voz alta e gostaria de expandir um pouco.
O agrupamento de coleções nas aulas é algo que tentei sempre fazer - minha regra é "nunca passar uma coleção nua". As maiores falhas do OO que eu vi são quando as pessoas têm medo de adicionar métodos a que pertencem. No seu caso, os métodos pertencem à coleção (totalmente obviamente se você pensar sobre isso); portanto, coloque-os lá envolvendo a coleção e para colocar a cobertura no bolo, apenas exponha a funcionalidade necessária fora da sua nova classe (como codingoutloud fez) para que você possa ver sua classe única e pequena e entender facilmente tudo que manipula essa coleção.
Você não precisa resolver todos os problemas possíveis, porque é todo o seu código, você pode editar o wrapper de coleção com a mesma facilidade que você pode editar as outras classes que interagem com ele. Isso permite que você puxe outro código para a classe conforme necessário - se você nunca expuser a coleção, ficará rapidamente óbvio qual código pertence ao wrapper.
Isso também fornece controle total sobre a coleção, para que você possa impedir que ela entre em um estado inconsistente com sua função (por exemplo, se nenhuma entrada na coleção puder ser nula, apenas impeça que alguém coloque uma nula!)
A maior parte do código OO ruim que eu já vi foi criada porque alguém escolheu escrever utilitários estáticos ou código embutido que pertenciam a objetos aos quais não podiam adicionar código, em vez de agrupar os objetos ofensivos em um código próprio que eles poderiam modificar .