Non è particolarmente "bello" usare l'effetto collaterale del forEach per fare un add su un'alta lista esterna.
Quel distinctByKey che hai mostrato all'inizio, perché dici che non va bene? Sostanzialmente è un filtro "stateful" (con dello stato che viene mantenuto). E mi pare che l'hai preso da internet, forse da stackoverflow, perché mi pare di aver già visto una cosa di quel tipo.
Appena ho tempo, lo verifico.
P.S. tra l'altro ora che rileggo meglio quel tuo codice iniziale, nella parte:
list.stream().filter(distinctByKey(n -> n.getGruppo())).collect(Collectors.toList());
NON stavi usando la lista generata dal toList() !! Il for che facevi sul list ... era la lista originale, quindi ovvio che non "vedevi" risultati utili.