Na primeira parte da sua função você pega o array the maps e extrai um iterador e achata ele com os valores.

Aí vc transforma em vector pra depois transformar em iterator de novo, o que não faz muito sentido ao menos que vc fosse usar o vector pra alguma coisa, o que não parece ser o caso.

Talvez o gargalo esteja ai dependendo do tamanho do seu dataset.

fn count_collection_iterator(collection: &[HashMap<String, String>], value: String) -> usize {
    collection
        .iter()
        .flat_map(|map| map.values())
        .filter(|x| **x == value)
        .count()
}

Caso ainda esteja demorado, talvez o problema esteja na comparação do seu objeto Progress. Ai seria melhor implementar uma comparaçao utilizando um hashcode que é pré-calculado na criação do objeto.

Boa sorte!

Muuito melhor assim, vlw!!